학습 정리/👨‍💻 PS Study

[C] 백준 1157번 - 단어 공부

무딘붓 2022. 7. 6. 23:11

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

 

1157번: 단어 공부

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

www.acmicpc.net

(21.08.08)

1157번: 단어 공부 - C언어 풀이

[소스코드]

#include <stdio.h>
#include <string.h>
// [baekjoon] 1157번 - 단어 공부

int main() {

	char S[1000001];	
	int cf[123] = { 0 };
	scanf("%s", &S);

	int i = 0;
	while (S[i] != '\0') {
		if (S[i]>=97) cf[S[i]-32]++;
		else cf[S[i]]++;
		i++;
	}

	int maxj = 0;
	int max = 0;

	for (int j = 65; j <= 90; j++) {
		if (cf[j] > max) {
			max = cf[j];
			maxj = j;
		}
		else if (cf[j] == max) {
			maxj = 100;
		}
	}
	if (maxj == 100) printf("?");
	else printf("%c", maxj);

}

별 생각없이 풀었더니 코드가 좀 난잡한 것 같다.
cf[S[i]]++;
이런식으로 코드를 짜본 건 처음이다.​

처음에
int cf[123] = { 0 }; 을
char cf[123] = { 0 };  로 써놓아서 백준에서 계속 틀렸다고 나왔다.​

https://www.acmicpc.net/board/view/30509

 

글 읽기 - ★☆★☆★ [필독] 단어 공부 FAQ ★☆★☆★

댓글을 작성하려면 로그인해야 합니다.

www.acmicpc.net


위의 글 2번을 보고서 소름돋았다. 저 글 안읽었으면 아직도 해매고 있었을 듯 싶다.
아마 쉽게 하는 실수 중 하나인 듯 한데, 이번 실수를 계기로 다음엔 조심해야겠다.