알고리즘/programmers

프로그래머스 레벨1 폰켓몬 (JAVA)

dev-jo 2021. 7. 6. 22:42

와 진짜 바보다 너무 멍청하다

 

이문제는 진짜 쉬운 문제다 문제만 잘 읽으면 된다..

 

오늘 풀 문제!

 

https://programmers.co.kr/learn/courses/30/lessons/1845

 

코딩테스트 연습 - 폰켓몬

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

programmers.co.kr

 

폰켓몬 진짜 문제는 엄청나 보이는데 별거 없는 문제다.

 

 

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

 

요 부분과

 

가장 많은 종류의 폰켓몬을 선택하는 방법이 여러 가지인 경우에도, 선택할 수 있는 폰켓몬 종류 개수의 최댓값 하나만 return 하면 됩니다

 

이 부분을 잘 봐야 한다.

 

모든 코드는 GitHub 에 올려놓았다.

 

package level01;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

/**
 *
 * 프로그래머스 레벨1 폰켓몬
 *
 */

public class Programmers1845 {

    public static void main(String[] args) {
        System.out.println(solution(new int[]{3,1,2,3}));
    }

    public static int solution(int[] nums) {

        Set<Integer> set = new HashSet<>();

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

        if(set.size() > nums.length / 2) { // 어차피 nums /2 밖에 못가져감
            return nums.length / 2;
        } else { // 만약에 가져갈수있는것보다 작을경우 전부 가져갈수있음
            return set.size();
        }

    }

    // 스트림
    public static int solution2(int[] nums) { // 같은 종류는 안된다, 중복제거하고 카운트가
        return Arrays.stream(nums).distinct().count() > nums.length / 2 ? nums.length / 2 : (int) Arrays.stream(nums).distinct().count();
    }

}

 

 

 

 

 

 

아래는 스트림와 삼항 연산자를 이용한 풀이이다.

 

일단 예시문제에서

 

3 ,1 ,2 ,3 

 

3, 3 은 같은 종류이기에 불가능하다.

 

그래서 중복을 걸러준다.

 

중복을 거르고 

 

홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다.

 

즉 nums.length / 2 다

 

nums = 10 라면

 

5마리가 가능하다는 거다

 

여기서 nums를 중복을 제거한 수가 

 

nums / 2 보다 작다면  

 

모든 종류를 가질 수 있게 된다.

 

ex) nums.length = 10

 

10 / 2 = 5

 

set = 3 ( 중복제거)

 

나는 5종류를 가질 수 있고 현재 남은 종류는 (중복제거 후 ) 3종의 모든 종류를 가질 수 있다

 

return set.size();

 

set = 6이라면

 

나는 5종류밖에 못 가지니

 

return nums.length / 2; 가된다..

 

이걸 문제를 대충 읽어 경우의 수를 구하는 삽질을 하고 있었다..

 

문제를 잘 보자..ㅠㅠ