본문 바로가기

Development

BOJ 1577(단어공부)

처음에 C++로 구현하려고 했는데 계속 런타임 에러가 떴다. 

#include <stdio.h>
#include <string.h>
char str[1000001] = { 0, };

int main() {
	int alpha[26] = { 0, };
	unsigned int max = 0;
	scanf("%s", str);
	unsigned int length = strlen(str);

	for (int i = 0; i < length; i++) {
		if (str[i] >= 'A' && str[i] <= 'Z') {
			alpha[str[i] - 'A']++;
		}
		if (str[i] >= 'a' && str[i] <= 'z') {
			alpha[str[i] - 'a']++;
		}
	}
	
	for (int i = 1; i < 26; i++) {
		if (alpha[max] < alpha[i]) max = i;
	}
	for (int i = 0; i < 26; i++) {
		if (i == max) continue;
		if (alpha[max] == alpha[i]) {
			printf("?");
			return 1;
		}
	}

	printf("%c", 'A'+max);

	return 0;
}

왜 안되는지는 아직도 모르겠다. str이나 alpha 변수에서 인덱스를 잘못 참조한거 같은데 코드를 보면 인덱스가 음수로 가거나 잘못된 값을 참조할 것 같진 않는데.. 결국엔 파이썬으로 구현했다.

str = input()
str = str.upper()
alpha = []
for i in range(0,26):
	alpha.append(0)

for i in str:
	alpha[ord(i)-65]+=1

max_value = 0
idx = -1
flag = False
for i in range(0, 26):
	if max_value < alpha[i]:
		max_value = alpha[i]
		idx = i

for i in range(0, 26):
	if i == idx:
		continue
	if max_value == alpha[i]:
		flag = True

if flag:
	print("?")
else:
	print(chr(idx+65))

'Development' 카테고리의 다른 글

BOJ 1002 (터렛)  (0) 2021.01.10
BOJ 1316(그룹 단어 체커)  (0) 2021.01.07
BOJ 10828(스택), 10799(쇠막대기)  (0) 2020.12.24
CodeUp 기초100제 (바둑알 십자뒤집기)  (0) 2020.10.18
Win32 API 정리  (0) 2019.03.06