본문 바로가기

문제풀이/C 문제풀이

2941

2941

2941번 문제
#include 

int main(void) {
	char str[100] = {0,}; // 단어를 받을 배열
	int i = 0, s = 0; // 배열의 인덱스와 합계를 나타낼 변수
	scanf("%s", str); // 단어 입력 받음
	do {
		switch (str[i]) { // 단어 하나
		case 'c': // 입력 받은 단어가 c일 경우
			if (str[i+1] == '-' || str[i+1] == '=')  s--;  // 다음 단어가 -, =일 경우 c를 한 단어로 취급하지 않는다
			break;
		case 'd': // 입력 받은 단어가 d일 경우
			if (str[i+1] == '-') s--; // 다음 단어가 -일 경우 d를 한 단어로 취급하지 않는다
			else if (str[i+1] == 'z' && str[i+2] == '=') s--; // 다음 단어가 z이고 다다음단어가 =일 경우 d를 한 단어로 취급하지 않는다
			break;
		case 'l':
		case 'n': // 입력 받은 단어가 i 또는 n일 경우
			if (str[i+1] == 'j') s--; // 다음 단어가 j일 경우 i 또는 n을 한 단어로 취급하지 않는다
			break;
		case 's' :
		case 'z' : // 입력 받은 단어가 s 또는 z일 경우
			if (str[i+1] == '=') s--; // 다음 단어가 s일 경우 한 단어로 취급하지 않는다
			break;
		default : // 그 외의 단어를 입력 받은 경우
			break;
		}
		s++; // 단어의 수를 하나 추가한다(입력 받은 단어가 한 단어가 아닌 경우에는 앞에서 s--를 통하여 수를 맞춰주었다
	} while (str[++i] != '\0');
	printf("%d\n", s); // 결과 출력
	return 0;
}

결과

2941.png

문자열 속에서 특정 패턴을 찾는 문제였다. 한 문자씩 입력 받고 다음 문자가 특정 문자일 시 수를 더하지 않으려는 형식으로 진행하였다. if문보다는 switch문을 통해 형식을 간소화하려고 하였다. 비교하는 문자 str[i]의 다음 문자가 특정 패턴의 첫 문자가 되는 경우가 없어서 str[i]일 때는 합계를 더하지 않고 그 다음 문자에서 합계를 더하였다.

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

2920 + getchar + 배열 비교  (0) 2019.02.28
8958 + sizeof/strlen +char/int형 선언  (0) 2019.02.28
2577  (0) 2019.02.24
1152  (0) 2019.02.24
5622  (0) 2019.02.16