import java.util.*;
class Main {
public char solution(int n, String str) {
char answer = ' ';
int max = Integer.MIN_VALUE;
HashMap<Character,Integer> map = new HashMap<>();
for(char x : str.toCharArray()) {
map.put(x,map.getOrDefault(x, 0)+1);
}
for(char key : map.keySet()) {
//System.out.println(key + " " + map.get(key));
if(map.get(key) > max) {
answer = key;
max = Math.max(map.get(key), max);
}
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
String a = kb.next();
System.out.print(T.solution(n, a));
}
}
먼저 foreach문을 통해 key값과 그 key값이 나온 횟수만큼 counting을 해서 결과적으로
A : 2, B : 3, C : 5, D : 2, E : 3 값이 담긴 Hashmap을 만들었다.
다시한번, foreach문을 통해
만약, 현재 value값이max보다 크다면 if(map.get(key) > max),
answer에는 key값이 담기고(answer= key)
max = 현재 value값으로 바뀐다 max = Math.max(max,map.get(key)).
HashMap<Character,Integer> map = new HashMap<>();
=> key값의 데이터타입이 char, value값의 데이터타입이 int인 hashmap이 생성된다.
예) 'a' : 1, 'b' : 2, 'c' : 3 ... 이런 hashmap이 있다면,
map.get(a) = 1을 리턴한다.
예) 비어있는 Hashmap에 map.put('a',1) 을 하게되면 map에는 'a' : 1이 담긴다.
이를 활용해서 counting을 할 때, 아직 key값이 들어오지 않았어도 counting을 시작 할 수있다.
예)
char s = 'a'
map.put(s,map.getOrDefault(s,0) + 1); 을 하게되면
만약, map에 key s가 없다면 map.getOrDefault(s,0) = 0이므로
결국 map.put(s,0+1)을 하는 것과 같다.
예) 'a' : 1, 'b' : 2, 'c' : 3 ... 이런 hashmap이 있다면,
map.containsKey('f')를 하게된다면 false를 리턴한다.
예) 'a' : 1, 'b' : 2, 'c' : 3 ... 이런 hashmap이 있다면,
HashMap.remove('a') 는 hashmap을 'b' : 2, 'c' : 3 ...이런 형태로
a의 key와 value값을 삭제하고 1을 리턴한다.