백준 1157 단어 공부 문제를 풀고 있는데 어느 부분이 틀린건지 모르겠습니다...

{
	char a[1000000] = { 0, };
	int alpha[26] = { 0, };
	int max;
	int flag;
	int num;

	scanf("%s", a);

	for (int i = 0; a[i] = '\0'; i++)
	{
		if ((a[i] >= 'A') && (a[i] <= 'Z'))
			a[i] += 32;
	}
	for (int i = 0; a[i] != '\0'; i++)
		printf("%c", a[i]);

	
	for (int i = 0; a[i] != '\0'; i++)
		alpha[a[i] - 97]++;

	max = -1;

	for (int i = 0; i < 26; i++)
	{
		if (max == alpha[i])
			flag = 0;
		else
		{
			if (max < alpha[i])
			{
				max = alpha[i];
				flag = 1;
				num = i;
			}
		}
	}


	if (flag == 0)
		printf("?");
	else
		printf("%c", num+'A');
	
	return 0;
	
}

일단 중간에 정답이랑 관계없이 printf가 들어가있는데… 아마 테스트용으로 넣었다 깜빡하고 안 지우신듯…

  1. 여기는 백준이 아니고 백준에 상주하는 사람들이 주 이용자층도 아니므로 최소한 문제 링크를 같이 올려주세요.

  2. 뭐가 틀렸다는 건지 써주세요. (런타임 에러? 타임 리미트? 컴파일 에러? 그냥 오답?)

  3. 본인이 어디까지 고민하셨는지 써주세요. 최소한 예제 테스트 케이스는 다 맞춰보셨나요? 포럼의 많은 이용자는 코드리뷰랑 코딩으로 월급 받고 사는 사람들입니다. 공짜로 해 주는 분들도 있지만, 그런 리뷰를 공짜로 받으시려면 고민하신 흔적을 보여주세요.

5 Likes

걍 답 써드립니다.

#include <iostream>
#include <string>
#include <vector>
#include <cassert>
 
constexpr int NUM_CHARS = 26;
 
int main() {
 
	std::string str;
    std::cin >> str;
	std::vector<int> freq(NUM_CHARS);
	
	for (const char& c : str) {
	    freq[std::tolower(c) - 'a']++;
	}
	
	int maxFreq = 0;
	bool isUnique = true;
	int argmax = -1;
	
	for (int i = 0; i < NUM_CHARS; i++) {
	    if (maxFreq < freq[i]) {
	        maxFreq = freq[i];
	        isUnique = true;
	        argmax = i;
	    } else if (maxFreq == freq[i]) {
	        isUnique = false;
	    }
	}	
	assert(argmax > -1);	
	char res = (isUnique ? std::toupper(argmax + 'a') : '?');
	std::cout << res;
	
	return 0;
}
1 Like

첫번째 for문 a[i] = '\0' 보고 내렸읍니다. !=이 아닌가요?

이번 한 번만 도와드리는 겁니다. 다음부터 이런 맞왜틀 류의 질문은 답해드리기 힘들어요.

즐거운 커뮤니티 생활 해나가면 좋겠읍니다. 좋은 질문에는 항상 좋은 답변 해드릴게요.

@frozenca @ghkfmfmfmr @cowlick21 @yooha

이 계정도 얼마전에 잠금당한 계정(C언어 코드작성좀 부탁드려요) 이랑 아마도 같은 부류가 아닐까 생각되네요.

일종의 트롤링입니다. 그 전 아이디는 막아뒀구요.

이런류의 무성의한 코드만 찍 싸놓은 글은 앞으로 올라오지 못하도록 노력 하겟읍니다.

혹시라도, 이런 글 보시면 “신고” 플래그를 살짝 눌러주세요, 답글달지 마시구요.

3 Likes

코드 트롤링… 신박하네요.