djm03178   3년 전

  1. 글자의 수를 세는 변수는 int여야 합니다. char로 개수를 세면 최대 127까지의 수밖에 세지 못하므로 최대 100만 글자의 입력이 주어지는 이 문제를 풀 수 없습니다.
  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   2년 전

좋은 정보 감사합니다. 

icchris   2년 전

감사합니다!!

sch030518   2년 전

예언가신가요...?

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

감사해요 ㅠㅠ!!

brenda524   1년 전

글자의 수를 세는 변수가 char가 아닌 int여야 하는 이유가 무엇인가요?? 잘 모르겠습니다 ㅠ

다른문제를 풀때는 이런 상황일 때 char를 사용해도 맞았다고 나왔는데요...

djm03178   1년 전

char는 127까지의 수밖에 세지 못하는데, 이 문제에서는 최대 100만의 수를 세야 하기 때문입니다.

acma   1년 전

char cnt[26] ... 소름돋았습니다. 저도 이렇게 썼네요

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