본문 바로가기
알고리즘 문제풀이/인프런

[알고리즘] 4-1 학급 회장 - HashMap(인프런 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비 강의)

by jeonghaemin 2021. 5. 28.
728x90

인프런의 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비 강의를 수강하며 간략한 문제 설명, 예습 풀이 코드, 강의에서 설명하는 풀이 코드를 정리하고 있습니다.

  • 문제 링크 : https://cote.inflearn.com/contest/10/problem/04-01
  • 문제 설명 : 학급 회장 선거에 A,B,C,D,E 후보가 등록, 투표에 참여하는 반 학생수 n명과 투표 결과가 n개 길이의 문자열(문자열의 각 문자는 투표한 후보 알파벳)이 주어졌을 때 어떤 후보가 당선되었는지 출력하는 문제

예습 풀이

  • 아스키 코드 값을 활용하여 득표 수를 저장하는 배열의 인덱스로 후보 알파벳을 사용.
    • A의 아스키 코드 값은 65인 것을 활용하여, A의 배열 인덱스는 'A'-65로 0이다.
package inflearn.hashmap_treeset;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

//학급회장
public class Main4_1 {

    public static char solution(int n, char[] arr) {
        int[] count = new int[n];

        for (int i = 0; i < n; i++) {
            count[arr[i]-65]++;
        }

        int maxIdx = 0, maxCnt = count[0];

        for (int i = 1; i < n; i++) {
            if (maxCnt < count[i]) {
                maxIdx = i;
                maxCnt = count[maxIdx];
            }
        }

        return (char)(maxIdx+65);
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());
        String s = br.readLine();
        char[] arr = new char[n];

        for (int i = 0; i < n; i++) {
            arr[i] = s.charAt(i);
        }

        System.out.println(solution(n, arr));

        br.close();
    }
}

강의 수강 후 복습 풀이

  • 키를 후보, 값을 득표수로 하는 HashMap을 사용하여 풀이
public static char solution2(int n, char[] arr) {
    char answer = ' ';
    Map<Character, Integer> map = new HashMap<>();

    for (char c : arr) {
        map.put(c, map.getOrDefault(c, 0) + 1);
    }

    int max = 0;

    for (char key : map.keySet()) {
        if (map.get(key) > max) {
            answer = key;
            max = map.get(key);
        }
    }

    return answer;
}

댓글