본문 바로가기

CodingTest Practice

[인프런] 학급 회장

 

학급 회장

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

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

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

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

 

■ 문제 풀이

1) 입력 설명
- 첫 줄에는 반 학생 수 N(5<=N<=50)이 주어집니다.
- 두번째 줄에는 N개의 투표용지에 쓰여져 있던 각 후보의 기호가 선생님이 발표한 순서대로 문자열로 입력됩니다.

2) 출력 설명
- 학급 회장으로 선택된 기호를 출력합니다.

3) 테스트
- input : 
15
BACBACCACCBDEDE

- output :
C

4) 문제 풀이
- HashMap을 이용하여 문제를 풀었다.
- HashMap에 각 후보의 투표수가 얼마인지를 계산해서 넣는 과정에 다음과 같이 코드를 작성했었다. 
for (char c : chars) {
    if (map.containsKey(c)) {
        map.put(c, map.get(c) + 1);
    } else {
        map.put(c, 1);
    }
}

- 이 코드의 경우 if-else 구문이 한번 더 추가되어 코드의 가독성이 떨어진다.
- HashMap의 getOrDefault() 함수를 이용한다면, key에 대한 값이 존재할 경우에는 value를 반환하고 그렇지 않을 경우 설정한 default 값이 반환된다.

- 이를 이용하면, 코드가 더 간결해지는 것을 확인 할 수 있다.
for (char c : chars) {
    map.put(c, map.getOrDefault(c, 0) + 1);
}

 

import java.util.*;

public class Main {

    public static String solution(String input, int n) {
        HashMap<Character, Integer> map = new HashMap<>();

        char[] chars = input.toCharArray();
        for (char c : chars) {
            map.put(c, map.getOrDefault(c, 0) + 1);
        }


        int max = Integer.MIN_VALUE;
        char president = 0;

        for (char key : map.keySet()) {
            int value = map.get(key);
            if (value > max) {
                max = value;
                president = key;
            }
        }
        return Character.toString(president);
    }

    public static void main(String[] args) {
        final Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        String input = scanner.next().trim();

        System.out.println(solution(input, n));
    }
}

 

 

'CodingTest Practice' 카테고리의 다른 글

[Stack] 괄호문자 제거  (0) 2022.05.12
[인프런] 아나그램  (0) 2022.04.27
[인프런] 이진수 출력  (0) 2022.04.22
[인프런] 재귀함수  (0) 2022.04.22
[인프런] 뒤집은 소수  (0) 2022.04.21