본문 바로가기
츄Log/알고리즘 연습장

연습#4 폰켓몬

by 츄츄🦭 2023. 12. 5.
728x90

 

오늘도 알고리즘 문제 연습을 했습니다.

프로그래머스의 정렬 Level2를 풀다가 머리가 깨질 것 같아서 잠시 덮어두고(이따 다시 도전할 예정입니다.) 

해시 Level2 문제를 풀었습니다. 

어제 해시 Level1을 연습해서 그런지, 이번 문제는 10분만에 풀었습니다. 기분이 좋습니다.

 

오늘 푼 문제는 해시 > Level2 폰켓몬 입니다. 

 

import java.util.*;

class Solution {
    public int solution(int[] nums) {  
        final Map<Integer, Integer> maps = new HashMap();
        for (int num: nums) {
            maps.put(num, maps.getOrDefault(num, 0)+1);
        }
        
        if (nums.length/2 <= maps.size()) {
            return nums.length/2;
        }
        
        return maps.size();
    }
}

 

사실 문제가 좀 쉬웠습니다. 

 

그리고 IDE없이 코딩하는 것이 익숙해지고 있습니다. 

 

다른 분들의 풀이도 한번 보았습니다.

import java.util.HashSet;

class Solution {
    public int solution(int[] nums) {

            HashSet<Integer> hs = new HashSet<>();

            for(int i =0; i<nums.length;i++) {
                hs.add(nums[i]);
            }

            if(hs.size()>nums.length/2)
                return nums.length/2;

            return hs.size();
    }
}

이 풀이를 보니, 새삼 깨달았습니다. 이번 문제는 중복을 카운트 할 일이 없고, 오히려 중복을 제거하면 됐었네요. 

어제 배운 '중복은 카운트다' 라는 공식에 꽂혀서 시야가 좁아졌던 것 같습니다. 

'중복의 개수를 필요로 하는지, 아니면 중복을 제거해야 하는지' 경우를 나누어서 생각해야할 것 같습니다. 

 

한 분 더 보겠습니다. 

import java.util.Arrays;
import java.util.stream.Collectors;

class Solution {
    public int solution(int[] nums) {
        return Arrays.stream(nums)
                .boxed()
                .collect(Collectors.collectingAndThen(Collectors.toSet(),
                        phonekemons -> Integer.min(phonekemons.size(), nums.length / 2)));
    }
}

 

저는 가능한 수를 구할 때, 공식을 생각했는데요(ex. maps.size() > nums.length / 2 ? nums.length / 2 : maps.size())

공식을 생각할 필요 없이 주어진 수는 모두 각자의 영역에서 최대값이니 이 중에서 "최소값"을 선택하면 됐습니다.

 


 

쉽게 풀어서 기분이 좋았는데, 최적의 솔루션이 더 있었네요ㅋㅋ

그래도 매일매일 익숙해지는 것 같아 기분 좋습니다.

 

728x90

'츄Log > 알고리즘 연습장' 카테고리의 다른 글

연습#6 H-Index  (1) 2023.12.06
연습#5 가장 큰 수  (1) 2023.12.06
연습#3 완주하지 못한 선수  (1) 2023.12.04
연습#2 K번째수  (1) 2023.12.03
연습#1 599. Minimum Index Sum of Two Lists  (0) 2023.12.03