djm03178   1년 전

  1. 글자의 수를 세는 변수는 int여야 합니다. char로 개수를 세면 당연히 안 됩니다.
  2. 1번을 다시 강조합니다. 내 코드는 설마 안 그랬겠지 생각하지 말고, 다시 확인해 보세요. 정말로 char cnt[26]처럼 쓰지 않았나요?
  3. O((길이)^2) 알고리즘은 당연히 시간 초과입니다. 문자열 전체를 이중 루프로 순회하는 코드라면 통과되지 못하는 게 당연합니다. 한 번의 순회에 해결해야 합니다.
  4. 반복문의 조건문에 strlen을 넣으면 안 됩니다. strlen은 문자열의 시작부터 한 글자씩 보면서 널 문자가 나타날 때까지 찾기 때문에 O(길이)이고, 이를 (길이)번 반복하므로 O((길이)^2)의 시간이 걸리게 됩니다. 길이를 미리 구해놓거나, 현재 문자가 널 문자인지 직접 체크하는 방법을 써야 합니다.
  5. 문자열로 입력받을 때 배열의 길이는 반드시 100만1 이상이어야 합니다. 널 문자를 저장할 공간이 별도로 필요하기 때문입니다. fgets로 받을 시 개행 문자까지 저장되므로 길이가 100만2 이상이어야 합니다.
  6. 최댓값을 갱신해가는 과정에서 현재까지의 최댓값과 같은 수가 또 나왔다고 곧바로 물음표를 출력하고 종료하면 안 됩니다. 전체에서 가장 많이 나온 글자가 몇 번 나왔는지를 끝까지 구해보기 전까지는 섣부른 판단은 금물입니다.
  7. Java에서 Integer로 수를 센 경우 반드시 equals() 메서드로 비교해야 합니다. == 은 두 객체가 동일한 객체인지를 보는 것으로, 그 값이 같은지를 보는 것과는 다릅니다. 127 이하의 수들에 대해서는 잘 동작하지만, 그 이상에서는 원하는 대로 동작하지 않습니다.
  8. 정답은 대문자로 출력해야 합니다.
  9. 지역 변수의 초기화를 잘 합시다. 내 컴퓨터에서는 잘 돌아간다고 해서 어디서든 안전한 건 아닙니다.

ksjlinker   1년 전

좋은 정보 감사합니다. 

icchris   10달 전

감사합니다!!

sch030518   10달 전

예언가신가요...?

char count[26] 이라고 써져있는거 보고 소름돋았습니다 ㅋㅋ

감사해요 ㅠㅠ!!

daniel060811   9달 전

저는 strlen() 에 시간이 쓰이는지 몰랐습니다! 감사해요!

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