프로그래밍 언어/C

C언어 백준 8959번

happy_life 2021. 9. 1. 00:27

https://www.acmicpc.net/problem/8958

 

8958번: OX퀴즈

"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수

www.acmicpc.net

 

문제

"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다.

"OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.

OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.

 

 

 

풀이

 

1)문자열과 관계되므로 문자열 배열을 선언하는 idea 

 *문자열은 선언하고 바로 넣어주면 error 가 난다. 넣으려면 하나씩 넣어줘야함 

error 남 

 

따라서, 선언하고 scanf해서 넣어주는 방식을 선택

 

2)선언한 문자열 배열의 최대 길이 80까지 모두다 체크할 순 없으므로, 

  strlen 함수를 사용해서 입력한 문자열의 길이만큼만 체크하는 idea 

*#include <string.h>    // strlen 함수가 선언된 헤더 파일  필요함

 

3)for문을 두개 사용( (1)문자열 배열 인수를 한사이클 씩 도는것, 2)테스트 개수)

 

답안코드

#include <stdio.h>
#include <string.h>    // strlen 함수가 선언된 헤더 파일


int main()
{
	int Test_case; 

	
	//Testcase 의 개수 입력
	printf("Testcase의 개수를 입력하시오\n");
	scanf("%d", &Test_case);

	int count ;
	int total ; 
	//문자열은 0보다 크고 80보다 작으므로 
	char score[79]; //문자열 형식으로 배열 선언 (0~79)

	for (int i = 0; i < Test_case; i++) {
		
		total = 0;
		count = 1; //여기서 초기화를 해주어야 다음 싸이클에 영향을 주지 않는다 
		

		printf("입력:");
		scanf("%s", score);


		//score = "OXOXOX"
		for (int j = 0; j < strlen(score); j++) {
			
			

			if (score[j] == 'O') {

				total = total + count;
				++count;

				printf("total: %d\n", total);
			}

			if (score[j] == 'X') {

				count = 1; 
				printf("----------count = 1\n");
			}

			 
		}
		
		printf("%d\n", total);
		
	}
	return 0;

}

 

'프로그래밍 언어 > C' 카테고리의 다른 글

C언어 1065번 해설 한수  (0) 2021.09.02
C언어 백준 4344번 해설  (0) 2021.09.01
C언어 백준 1546번  (0) 2021.08.31
C언어 백준3052 해설  (0) 2021.08.31
C언어 백준 2577번 해설  (0) 2021.08.25