Stone's LIFE

[백준 2941번] 크로아티아 알파벳을 세라면서요?

그라운드스톤 2023. 11. 13. 22:17
728x90

이번 문제는 크로아티아 알파벳을 세는 것이 목표다.

처음에는 이게 왜 심화에 있나 싶었지만 역시나 여기 있는 이유가 있었다. 

일단 내가 처음 짠 코드는 이렇다.

	char a[101];
	scanf("%s", a);
	int len = strlen(a);
	int cnt = 0;
	for (int i = 0; i < len; i++) {
		if (a[i] == '=') {
			if (a[i - 1] == 'c') {
				cnt++;
			}
			else if (a[i - 1] == 's') {
				cnt++;
			}
			else if (a[i - 2] == 'd' && a[i - 1] == 'z') {
				cnt++;
			}
			else if (a[i - 1] == 'z') {
				cnt++;
			}
		}
		else if (a[i] == '-') {
			if (a[i - 1] == 'c') {
				cnt++;
			}
			else if (a[i - 1] == 'd') {
				cnt++;
			}
		}
		else if (a[i] == 'j') {
			if (a[i - 1] == 'l') {
				cnt++;
			}
			if (a[i - 1] == 'n') {
				cnt++;
			}
		}
	}
	printf("%d", cnt);
	return 0;
	
}

특징이라고 할 수 있는 '=','-','j'를 기준으로 분류해서 조건에 부합할 때 하나씩 카운트가 올라간다. 

 

이렇게 제출했으나 결과는 "틀렸습니다".....

 

왜 틀렸나 확인해보니. 크로아티아에는 예시로 나온 8개의 글자가 더있다는 것이다...

그러니 일반적으로 알파벳을 세고 크로아티아 알파벳이 나오면 센 걸 빼줘야한다. 

그래서 바꿔서 해봤다. 

#include<stdio.h>
#include<string.h>

int main() {
	char a[101];
	scanf("%s", a);
	int len = strlen(a);
	int cnt = strlen(a);
	for (int i = 0; i < len; i++) {
		if (a[i ]== '=') {
			if (a[i - 1] == 'c') {
				cnt--;
			}
			if (a[i - 1] == 's') {
				cnt--;
			}
			if (a[i - 1] == 'z') {
				cnt--;
                if(a[i-2]=='d'){
                    cnt--;
                }
			}
        }
		if (a[i] == '-') {
			if (a[i - 1] == 'c') {
				cnt--;
			}
			if (a[i - 1] == 'd') {
				cnt--;
			}
		}
	    if (a[i] == 'j') {
			if (a[i - 1] == 'l') {
				cnt--;
			}
			if (a[i - 1] == 'n') {
				cnt--;
			}
		}
	}
	printf("%d", cnt);
	return 0;
	
}

이렇게 하니 정답이었다. 

참고로 이게 너무길다면 "||" 를 사용해도 된다. 

문제가 더 문맥상 명확하면 좋겠지만 예제를 제대로 읽지 않은 내 탓도 있다. 

하여튼 덜렁거리면 안된다니까

728x90