▼ Why ?
이제 해시함수를 이용하여 해결하는 문제를 기초적인 단계부터 풀어보려고 한다.
▼ 학급 회장
문제 정보
- 학급 회장을 뽑는데 후보로 기호 A, B, C, D, E 후보가 등록을 했습니다.
- 투표용지에는 반 학생들이 자기가 선택한 후보의 기호(알파벳)가 쓰여져 있으며 선생님은 그 기호를 발표하고 있습니다.
- 매개변수 s에 투표용지에 쓰여져 있던 각 후보의 기호가 선생님이 발표한 순서대로 문자열로 주어지면 어떤 기호의 후보가 학급 회장이 되었는지 반환하는 프로그램을 작성하세요.
- 반드시 한 명의 학급회장이 선출되도록 투표결과가 나왔다고 가정합니다.
제한사항
- 문자열 s의 길이는 100을 넘지 않습니다.
입출력 예
어떻게 해결해야 할까?
- 기호 A, B, C, D, E를 키(key)로 받고 투표 횟수를 값(value)로 저장할 HashMap class의 객체를 생성하자
- ' getOrDefault(Object key, V DefaultValue) ' 메서드를 이용하여 투표횟수, 즉 값(value)를 넣어준다면 쉽게 해결할 수 있을 것 같다
해결 코드
import java.util.*;
public class Solution {
public char solution(String s){
char voteMaxCount = ' ';
HashMap<Character, Integer> vote = new HashMap<>();
for(char symbol : s.toCharArray()) {
vote.put(x, vote.getOrDefault(x, 0) + 1);
}
for(char key : vote.keySet()) {
if(voteMax == ' ') {
voteMax = key; continue;
} else if(vote.get(key) > vote.get(voteMaxCount)) voteMax = key;
}
return voteMaxCount;
}
}
▼ 정리
- 이번 문제는 HashMap을 활용하는 기초적인 문제라 쉽게 해결할 수 있었다
- 해당 키(key)를 찾으면 찾은 키(key)의 값(value)를 반환하고, 찾지 못하면 기본 값(DefaultValue)를 반환하는 ' getOrDefault(Object key, V DefaultValue) ' 메서드를 기억해두면 유용하게 활용할 수 있을 것 같다