반응형

포켓몬 문제입니다 

 

문제를 간략히 정리해 봅시다 

 

N/2 마리의 포캣몬을 가져갈 수 있는데 중복된 포켓몬 보다는 여러 종류의 포켓몬을 갖고 싶어 합니다

 

[ 1, 2, 3, 1 ] 이 숫자는 포켓몬의 종류를 나타내고 총 4마리가 있지만 / 2 로 나눈 갯수인 2마리만

가져갈 수 있습니다 그럼 내가 고를 수 있는 포캣몬의 수는 2이겠죠 경우의 수를 다 따져봐도 

2마리만 가져갈 수 있기 때문입니다 

[1, 2]  [1, 3]  [2, 3] 이런 방식으로 말이죠 

 

이번 문제에서는 저는 입출력의 예를 보며 풀어냈는데 같이 보면서 생각해봅시다 

저는 규칙이 있겠다라고 생각을 했습니다 

처음엔 같은 숫자가 있는지 먼저 체크를 하고 그 숫자의 인덱스만 제외하고 나머지 숫자의 경우의 수를

체크해서.. 이러다 보니 머리가 터질 거 같더라고요 

다르게 생각하니 너무 간단했습니다

 

그냥 중복을 제거합시다

 

어차피 다른 종류의 포켓몬을 가지고 싶어 하는데 굳이 중복된 데이터를 갖고 있을 필요는 없다고 보이거든요 

 

먼저 총 num의 length의 / 2 한 내가 고를 수 있는 포켓몬의 개수를 체크합니다 

 

int selCnt = nums.length / 2; //선택 할 수 있는 포캣몬 수

그리곤 중복을 제거합니다

 

nums = Arrays.stream(nums).distinct().toArray();

여기서 가만 생각하니 어차피 종류의 갯수를 리턴하는 문제이고 규칙을 보니 

 

중복을 제거한 nums의 length 가 내가 고를 수 있는 selCnt보다 적으면 

중복을 제거한 nums의 length가 내가 고를 수 있는 최대의 포켓몬 개수인데?라는 생각이 들더라고요 

 

그리고 중복을 제거한 nums의 length가 만약 selCnt보다 크다면 내가 고를 수 있는 포켓몬의 숫자가 엄청 많아

지겠죠 근데 selCnt개수를 넘어갈 순 없어요 

 

그럼 그냥 selCnt를 넘기면 되겠구나 하고 했더니 올타쿠나 맞았습니다 ㅎㅎ

 

전체 코드입니다 

        int selCnt = nums.length / 2; //선택 할 수 있는 포캣몬 수

        nums = Arrays.stream(nums).distinct().toArray();

        answer = nums.length < selCnt ? nums.length : selCnt;

 

제한되는 여건을 확인하고 그 속에서 규칙을 찾았더니 어렵지 않게 풀어낼 수 있었던 문제였습니다

반응형
복사했습니다!