배열에서 제일 많이 등장하는 값을 찾는 문제였는데, 생각보다 다양한 방법으로 풀 수 있는 문제였다.
처음엔 그냥 배열을 정렬해서 앞뒤로 비교하면서 세면 되지 않을까 싶었는데, 중복처리나 복잡한 케이스를 생각하면 그게 생각보다 깔끔하진 않았다.
그래서 결국 해시맵을 쓰는 방식으로 풀었다.
나의 풀이:
import java.util.HashMap;
class Solution {
public int solution(int[] array) {
HashMap map = new HashMap<>();
for(int i=0; i 1 ? -1 : maxKey;
}
}
돌아보며..
핵심은 HashMap을 사용해서 숫자별 등장 횟수를 세는 것이었다.
그리고 최빈값이 하나로 확정되지 않고 여러 개 나오면 -1을 반환해야 해서, 등장 횟수가 같은 숫자가 여러 개 있는지 체크하는 로직도 필요했다.
getOrDefault()를 써서 존재하지 않는 키도 처리하는 방식은 정말 자주 쓰이니까, 무조건 익숙해져야겠다.
나중에 속도를 더 중요하게 따지는 문제에서는 배열의 크기가 작으면 (예를 들어 값의 범위가 정해져 있으면) HashMap 대신 그냥 배열을 카운터로 쓰는 것도 가능할 것 같다.
댓글
댓글 작성은 로그인 후에 가능합니다.