학급회장(HashMap)
1. 학급 회장(해쉬)
설명
학급 회장을 뽑는데 후보로 기호 A, B, C, D, E 후보가 등록을 했습니다.
투표용지에는 반 학생들이 자기가 선택한 후보의 기호(알파벳)가 쓰여져 있으며 선생님은 그 기호를 발표하고 있습니다.
선생님의 발표가 끝난 후 어떤 기호의 후보가 학급 회장이 되었는지 출력하는 프로그램을 작성하세요.
반드시 한 명의 학급회장이 선출되도록 투표결과가 나왔다고 가정합니다.
입력
첫 줄에는 반 학생수 N(5<=N<=50)이 주어집니다.
두 번째 줄에 N개의 투표용지에 쓰여져 있던 각 후보의 기호가 선생님이 발표한 순서대로 문자열로 입력됩니다.
출력
학급 회장으로 선택된 기호를 출력합니다.
예시 입력 1
15
BACBACCACCBDEDE
예시 출력 1
C
📌
Key값 : Character
Value : Integer
ex) A : 3(개)
Map은 객체를 입력으로 사용하는 인터페이스
기본 유형을 일반 인수로 사용할 수 없음
map.get은 key의 value값을 가져온다. 근데 맨처음에는 put을 한번도 안해서 밸류값 없을 수 있으니!
map.getOrDefault(x, 0)로 가져오기 → x의 value값을 가져오되, 없으면 0을 리턴해 그 후에 그 value값에 +1 한다음에 put으로 저장
• defaultValue : 지정된 키로 매핑된 값이 없는 경우 반환되어야 하는 기본값
getOrDefault 매우 중요한 메소드!!
for(char x : map.keySet()) {} 이렇게 map.keySet하면 존재하는 키 다 탐색함
map.get(x)는 value값 가져오는
.containsKey(’해당 키 ex)A ‘) 하면 해당 키가 있으면 true 없으면 false 리
.size() → 키의 갯수 알려줌 ex) abcdeabcde 있으면 5
.remove(’해당 키 ex)A ‘) 하면 해당 키 삭제
와 return값 char가 아니니까 67이라고 뜨네.. C라고 떠야하는데 조심하자!!
entrySet() 메서드는 key와 value의 값이 모두 필요한 경우 사용하고,
keySet() 메서드는 key의 값만 필요한 경우 사용
import java.util.*;
import java.util.Scanner;
class Main {
public char solution(int n, String s) { //입력값 조심!! char임 !! char c == int 67
char answer = ' '; // char 초기화
HashMap<Character, Integer> map = new HashMap<>(); // 맵은 객체 받으니 int같은거 안됨!!
for (char x : s.toCharArray()) {
map.put(x, map.getOrDefault(x, 0) + 1);
}
// System.out.println(map.containsKey('F')); 키값 F를 포함하고 있는지 true,false 반환
// System.out.println(map.size()); 키값 몇개인지
// System.out.println(map.remove('C')); 키 C 제거
int max = Integer.MIN_VALUE;
for (char key : map.keySet()) {
// System.out.println(key +" " + map.get(key)); // A 3 B 3 C 5 D 2 E 2
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));
}
}