Post

[인프런] 학급 회장(해쉬)

[인프런] 학급 회장(해쉬)

난이도

  • Easy

문제 설명

학급 회장을 뽑는데 후보로 기호 A, B, C, D, E 후보가 등록을 했습니다. 투표용지에는 반 학생들이 자기가 선택한 후보의 기호(알파벳)가 쓰여져 있으며 선생님은 그 기호를 발표하고 있습니다. 선생님의 발표가 끝난 후 어떤 기호의 후보가 학급 회장이 되었는지 출력하는 프로그램을 작성하세요.

입력 형식

  • 정수, 문자열

출력 형식

  • 문자열

예제 입력 및 출력

1
2
3
**예제 1:**
입력: 15 BACBACCACCBDEDE
출력: C

접근 방법

  • 해시맵 사용: 각 후보와 후보에 따른 투표수를 저장하기 위한 해시 맵 사용
  • map 순환 : 맵을 loop 하면서 최대 투표자 수 확인

    시간 및 공간 복잡도

  • 시간 복잡도: O(n) - 투표 문자열을 한 번 순회 ( O(n))
  • 공간 복잡도 : O(1) - 해시맵에 저장되는 요소는 최대 5개(A, B, C, D, E)로 고정되어 있으므로 입력 크기와 상관없이 상수 공간을 사용

코드 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class App {
    public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        sc.nextLine();
        String vote = sc.nextLine();
        Map<Character, Integer> voteMap = new HashMap<>();
        for (char c : vote.toCharArray()) {
            if (voteMap.containsKey(c)) {
                int count = voteMap.get(c);
                voteMap.put(c, count + 1);
            } else {
                voteMap.put(c, 1);
            }
        }
        int max = 0;
        char answer = 0;
        for (char key : voteMap.keySet()) {
            if (voteMap.get(key) > max) {
                max = voteMap.get(key);
                answer = key;
            }
        }
        System.out.println(Character.toString(answer));
    }
}

This post is licensed under CC BY 4.0 by the author.