티스토리 뷰

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

int main(void) {
	int n,c=0,e=0,i,h;
	char s[101],d[100][95];
	scanf("%d",&n);
	while(scanf("%s",s)) {
		int l=strlen(s);
		char *a=s+l-6;
		if(!strcmp("Cheese",a)) {
			s[l-6]=0;
			h=0;
			for(i=0;i<e;i++) {
				if(!strcmp(d[i],s)) {
					h=1;
					break;
				}
			}
			if(!h){
				strcpy(d[e++],s);
				++c;
			}
		}
		if(!(--n)) break;
	}
	printf("%s",(c>3)?"yummy":"sad");
}

 

풀이 : string.h 사용

while(scanf("%s",s)) 이런식으로 공백으로 구분된 여러 문자열들을 끊어서 받아낼수 있습니다. 물론 끄는 것은 불가하므로 이전에 입력받았던 n을 이용하여 반복문을 종료하면 됩니다.

 

먼저 입력받은 문자열의 길이를 구한다음, 마지막 부분이 "Cheese" 인지를 확인하기 위해서

char *a=s+l-6; 이런식으로 문자열의 끝부분('\0')으로 간 다음 -6을 하면 맨 뒤의 6자리 문자열의 시작점을 얻어낼수 있습니다.

 

1. 가져온 마지막 부분이 "Cheese"인지를 판단.

2. Cheese 이전의 부분을 가져와서 ("Cheese"의 'C'부분을 '\0'으로 바꿈) 이전에 입력된 Cheese로 끝나는 문자열과 중복인지를 확인, 만약 중복이 아니라면 d[]에 집어넣고, c을 1 증가 (c는 중복되지 않는 Cheese로 끝나는 문자열의 개수를 의미함)

3. c가 4 이상이라면 yummy 을 출력 그렇지 않다면 sad를 출력

 

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

 

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함