[Study] 프로그래머스 lv.1 폰켓몬 (63%)

ayboori·2023년 8월 20일
0

Java Study

목록 보기
26/34

문제 설명

사용자는 현재 포켓몬의 반을 가져갈 수 있다.

가져갈 수 있는 포켓몬의 조합 중, 가장 다양한 조합으로 가져가는 방법은 무엇일까?

풀이 로직

  1. 최대로 가질 수 있는 포켓몬의 수 세팅 limit
  2. nums 내에 중복을 제외한 포켓몬의 종류가 총 몇 개인지 센다
    1. Set에 종류를 넣으면 자동으로 중복 제거가 된다.
    2. set.size() 를 통해서 포켓몬 종류의 갯수를 type에 세팅
  3. 포켓몬 종류가 limit 보다 작으면 포켓몬 종류를, 크면 limit 을 리턴한다. (종류가 많아봤자 가져갈 수 있는 총량보다 많이 가져갈 순 없으니까!)

내가 작성한 코드

import java.util.HashSet;

class Solution {
    public int solution(int[] nums) {
        int limit = nums.length/2; // 최대로 가질 수 있는 포켓몬의 수
        
        // nums 내에 중복을 제외한 종류가 몇 개인지 센다
				// Set은 중복을 제거하는 타입이므로 활용!
        HashSet<Integer> PoketType = new HashSet<>();
        
        for(int num : nums){
            PoketType.add(num);
        }
        
        int type = PoketType.size(); // 포켓몬의 총 종
        
        // 총 종류의 갯수가 limit보다 작으면 종류의 수 return, 아닐 경우 limit을 리턴
        return type < limit ? type : limit;
        
    }
}

통과 시간

0.04 ~ 6.57ms
| 테스트 1 〉 | 통과 (0.04ms, 73.3MB) |
| --- | --- |
| 테스트 2 〉 | 통과 (0.12ms, 78.3MB) |
| 테스트 3 〉 | 통과 (0.04ms, 65.5MB) |
| 테스트 4 〉 | 통과 (0.06ms, 66.4MB) |
| 테스트 5 〉 | 통과 (0.05ms, 71.9MB) |
| 테스트 6 〉 | 통과 (0.16ms, 77.6MB) |
| 테스트 7 〉 | 통과 (0.19ms, 75.8MB) |
| 테스트 8 〉 | 통과 (0.28ms, 75.1MB) |
| 테스트 9 〉 | 통과 (0.38ms, 73.3MB) |
| 테스트 10 〉 | 통과 (0.40ms, 76.1MB) |
| 테스트 11 〉 | 통과 (0.27ms, 74.6MB) |
| 테스트 12 〉 | 통과 (0.37ms, 72.1MB) |
| 테스트 13 〉 | 통과 (1.07ms, 82.2MB) |
| 테스트 14 〉 | 통과 (0.80ms, 74.5MB) |
| 테스트 15 〉 | 통과 (0.88ms, 79.7MB) |
| 테스트 16 〉 | 통과 (3.47ms, 83.3MB) |
| 테스트 17 〉 | 통과 (3.84ms, 83.7MB) |
| 테스트 18 〉 | 통과 (7.15ms, 81.6MB) |
| 테스트 19 〉 | 통과 (6.57ms, 69.7MB) |
| 테스트 20 〉 | 통과 (1.52ms, 88MB) |

다른 사람의 풀이

import java.util.Arrays;
import java.util.stream.Collectors;
public int solution(int[] nums) {
        return Arrays.stream(nums)
                .boxed()
                .collect(Collectors.collectingAndThen(Collectors.toSet(),
                        phonekemons -> Integer.min(phonekemons.size(), nums.length / 2)));
    }
  1. Arrays.stream(nums)은 배열 nums에서 정수 스트림을 생성

  2. .boxed()는 IntStream을 Stream로 변환

  3. Collectors.toSet()은 스트림의 요소에 Set 을 적용시켜줌
    -> 중복 제거

  4. Integer.min 을 통해 두 값중 작은 것을 반환하는 람다식 부분

profile
프로 개발자가 되기 위해 뚜벅뚜벅.. 뚜벅초

0개의 댓글