학급 회장
학급 회장을 뽑는데 후보로 기호 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 |