본문 바로가기

문제풀이/C 문제풀이

8958 + sizeof/strlen +char/int형 선언

8958

8958번 문제
#include 
#include  // strlen 함수

int main(void) {
	int s, sum, n, k, i = 0; // s : 더하는 숫자, n : 테스트 케이스의 개수, k : 배열 a의 인덱스, i : 테스트를 반복한 횟수
	char a[80]; // 테스트 케이스를 받을 배열
	
	scanf("%d", &n); // 반복할 횟수를 입력 받음
	while (n > i++) { //테스트 횟수
		scanf("%s", a); // 테스트할 배열을 입력 받음
		for (k = 0, sum = 0, s = 0; k < strlen(a); k++) { // 배열의 문자의 개수만큼 반복
			if (a[k] == 'O')
				sum += (++s); // s가 0으로 초기화되지 않으면(=X가 나타나지 않으면) 계속해서 더하는 숫자는 증가한다
			else
				s = 0; // X가 나타날 경우는 s를 초기화한다
		}
		printf("%d\n", sum); // 합계 출력
	}
	return 0;
}

결과

8958.png

OO/OX/XO/XX 이렇게 네 가지 경우로 나누어 보았을 때, OO/XO(맨 처음에 O일 경우 포함)일 때는 숫자를 더한다. OX/XX(맨 처음에 X일 경우 포함)일 때는 숫자를 더하지 않는다. 따라서 OO/XO일 경우에 숫자를 더하되, 더할 숫자를 이전보다 1씩 증가시키고 OX/XX일 경우에는 더할 숫자를 0으로 초기화 하였다.

+) 배열에서 sizeof 연산자와 strlen 함수의 차이
sizeof연산자는 처음 선언한 배열의 크기를 나타내고 strlen은 배열의 크기와 관계없이 문자의 개수를 출력한다

+) char형 배열과 int형 배열의 차이
배열 a를 선언하였을 때 char형으로 선언하면 위의 코드는 문제없이 실행된다. 하지만 int형으로 선언하면 모든 문자가 if문에서 else의 경우가 된다. (나중에 이유를 알아내면 작성하기)

'문제풀이 > C 문제풀이' 카테고리의 다른 글

10039  (0) 2019.02.28
2920 + getchar + 배열 비교  (0) 2019.02.28
2577  (0) 2019.02.24
1152  (0) 2019.02.24
2941  (0) 2019.02.17