Algorithm/Java

프로그래머스 - 폰켓몬 java :: 찾아라 프로그래밍 마에스터

고고마코드 2022. 7. 4. 23:00
반응형
1845번

코딩테스트 연습 - 폰켓몬 | 프로그래머스 (programmers.co.kr)

 

코딩테스트 연습 - 폰켓몬

당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다.

programmers.co.kr


풀이

문제의 설명은 긴데 핵심은 하나입니다.

중복되지 않은 수를 구하되 (nums / 2) 이하여야 한다는 것입니다.

 

  • 풀이1
public int solution(int[] nums) {		
    return Math.min(nums.length / 2, IntStream.of(nums).boxed().collect(Collectors.toSet()).size());
}

IntStream을 활용해 Set으로 만들어 중복을 제거한 후 Set의 크기를 구했습니다. 

이렇게 하면 중복되지 않은 포켓몬의 수를 구할 수 있습니다.

박사님은 포켓몬을 (nums / 2) 만큼만 준다고 했으니 둘 중에 더 작은 값이 답이 되겠습니다.

 

✔ 테스트 케이스 처리속도: 0.80ms ~ 5.47ms

 

  • 풀이2
public int solution2(int[] nums) {
	Set<Integer> set = new HashSet<Integer>();
	for (int num : nums) {
		set.add(num);
	}

	return Math.min(nums.length / 2, set.size());
}

이건 그냥 풀이1을 stream 없이 푼 방법입니다.

 

✔ 테스트 케이스 처리속도: 0.05ms ~ 3.73ms

반응형