[랜덤 마라톤] 단어 퍼즐(9946)

lhs's avatar
Dec 11, 2024
[랜덤 마라톤] 단어 퍼즐(9946)
notion image
notion image

1. 문제 풀이 아이디어

  • 배열을 사용하여 단어의 문자 수를 저장하고 비교하여 문제를 해결할 수 있다.

2. 나의 정답 코드

public class Main { public static void main(String[] args) throws IOException { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); StringBuilder stringBuilder = new StringBuilder(); String s; int count = 1; while (!(s = bufferedReader.readLine()).equals("END")) { stringBuilder.append("Case " + count + ": "); String ss = bufferedReader.readLine(); int[] alp = new int[26]; for (char c : s.toCharArray()) { alp[c - 'a']++; } boolean same = true; for (char c : ss.toCharArray()) { alp[c - 'a']--; } for (int i = 0; i < 26; i++) { if (alp[i] != 0) { same = false; break; } } stringBuilder.append(same ? "same\n" : "different\n"); count++; } System.out.print(stringBuilder); bufferedReader.close(); } }

3. 정리

  • 첫 번째 단어의 각 문자를 처리하면서 alp 배열의 값을 증가시킨다.
  • 두 번째 단어의 각 문자를 처리하면서 alp 배열의 값을 감소시킨다.
  • alp 배열에서 값이 0이 아닌 원소가 있으면 두 단어는 서로 다르다고 판단한다.

4. 다른 아이디어

  • 맵을 사용하여 문제를 풀 수도 있다.
  • 그러나 알파벳의 수가 26개밖에 없으므로, 배열을 사용한 방법이 더 효율적이다. 맵을 사용하면 속도가 2배 느릴 수 있다.
  • 맵을 사용하였을 때 성능
    • notion image
Share article

LHS's Study Space