코딩테스트/기타

[HashMap] 학급 회장 .java

머밍 2024. 10. 27. 14:42

설명

학급 회장을 뽑는데 후보로 기호 A, B, C, D, E 후보가 등록을 했습니다.

투표용지에는 반 학생들이 자기가 선택한 후보의 기호(알파벳)가 쓰여져 있으며 선생님은 그 기호를 발표하고 있습니다.

선생님의 발표가 끝난 후 어떤 기호의 후보가 학급 회장이 되었는지 출력하는 프로그램을 작성하세요.

반드시 한 명의 학급회장이 선출되도록 투표결과가 나왔다고 가정합니다.

입력

첫 줄에는 반 학생수 N(5<=N<=50)이 주어집니다.

두 번째 줄에 N개의 투표용지에 쓰여져 있던 각 후보의 기호가 선생님이 발표한 순서대로 문자열로 입력됩니다.

출력

학급 회장으로 선택된 기호를 출력합니다.

예시 입력 1 

15
BACBACCACCBDEDE

예시 출력 1

C

 

 

내 풀이

동일한 결과를 갖는 학생은 없음

 

학급 회장 (key), 투표 결과 (value)의 쌍을 갖도록 해시맵을 구성

해시맵 기본 문제라 금방 풀었다


import java.util.HashMap;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        String student = sc.next();//투표 결과를 문자열로 입력 받기
        HashMap<Character, Integer> map = new HashMap<>();


        for(char c : student.toCharArray()) {
            //기존에 있던 키라면 1 증가, 아니면 0에서 1로 초기화
            map.put(c, map.getOrDefault(c, 0) + 1);
        }
        int max = 0;//최대 출현 횟수
        char answer = ' ';
        
        for(char c : map.keySet()) {//최댓값 찾기
            if(map.get(c) > max) {
                max = map.get(c);//값 갱신
                answer = c;//정답인 학생 갱신
            }
        }
        System.out.print(answer);
    }
}

 

 

다른 풀이

문제에서 다루지 않은 해시맵의 중요 메서드들은 주석처리

 


import java.util.HashMap;
import java.util.Scanner;

public class Main {
    public char solution(int n, String str){
        char answer= ' ';
        HashMap<Character, Integer> map = new HashMap<>();//제너릭데이터타입
        for(char x : str.toCharArray()){
           map.put(x, map.getOrDefault(x, 0) + 1);
        }
        //System.out.print(map.containsKey('A'));//키가 존재하는 여부
        //System.out.print(map.size());//키의 개수
        //System.out.print(map.remove('B'));//키 삭제 -> B의 값 리턴
        int max = Integer.MIN_VALUE;
        for(char key : map.keySet()){//존재하는 키 모두 탐색
            if(map.get(key) > max ){
                max = map.get(key);
                answer = key;
            }
        }
        return answer;
    }

    public static void main(String[] args) {
        Main T =new Main();
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        String str = sc.next();//투표 결과를 문자열로 입력 받기

        System.out.print(T.solution(n,str));
    }
}