
포켓몬 문제입니다
문제를 간략히 정리해 봅시다
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;
제한되는 여건을 확인하고 그 속에서 규칙을 찾았더니 어렵지 않게 풀어낼 수 있었던 문제였습니다
'Developer > Java' 카테고리의 다른 글
[java]한글파일 생성 (0) | 2023.06.20 |
---|---|
[java]프로그래머스-3진법 뒤집기 (0) | 2023.06.09 |
[java]프로그래머스-삼각형의 완성조건 (1) (0) | 2023.05.24 |
[java]프로그래머스-부족한 금액 (0) | 2023.05.17 |
[java]함수형 인터페이스 (0) | 2023.01.04 |