📝 문제 요약
> 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다. 홍 박사님 연구실의 폰켓몬은 종류에 따라 번호를 붙여 구분합니다. 따라서 같은 종류의 폰켓몬은 같은 번호를 가지고 있습니다.
당신은 최대한 다양한 종류의 폰켓몬을 가지길 원하기 때문에, 최대한 많은 종류의 폰켓몬을 포함해서 N/2마리를 선택하려 합니다. N마리 폰켓몬의 종류 번호가 담긴 배열 nums가 매개변수로 주어질 때, N/2마리의 폰켓몬을 선택하는 방법 중, 가장 많은 종류의 폰켓몬을 선택하는 방법을 찾아, 그때의 폰켓몬 종류 번호의 개수를 return 하도록 solution 함수를 완성해주세요.
https://programmers.co.kr/learn/courses/30/lessons/1845
- 입출력 예시 1번 : 폰켓몬 4마리 중에서 2마리만 고를 수 있음. 가장 많이 고를 수 있는 경우 => [3,1], [2,3], [1,3] 3가지 방법 모두 result 값은 2로 동일하기 때문에 2를 리턴한다.
- 입출력 예시 2번 : 폰켓몬 6마리 중에서 3마리 고를 수 있음. 가장 많이 고를 수 있는 경우는 [3,2,4] 이고 종류는 총 3가지라서 3을 리턴하면 된다.
- 입출력 예시 3번 : 폰켓몬 6마리 중에서 3마리 고를 수 있음. 가장 많이 고를 수 있는 경우는 [3,3,2], [2,2,3]이다. 2가지 방법 모두 result 값은 2로 동일하기 때문에 2를 리턴한다.
🎨 풀이
💡 첫번째 시도 = 성공(은 아니지만 다른 코드가 기억이 안난다 ㅠㅠ)
def solution(nums):
answer = 0;
original_nums_len = len(nums) // 2
nums = set(nums)
if original_nums_len < len(nums) :
answer = original_nums_len
else : answer = len(nums)
return answer
> 이 코드의 핵심은 set 함수다.
1. N/2만큼만 가지고 갈 수 있기 때문에, 보기 편하려고 original_nums_len에 N/2 값을 넣어주었다.
2. nums 집합을 set 함수를 이용해 중복 제거했다. ( [3,3,3,2,2,2] -> [3,2] )
> 이 부분에서 폰켓몬 종류가 몇 가지인지 파악한다.
3. 만약 N/2보다 종류가 많다면 answer에 N/2를 넣고 RETURN한다.
그렇지 않다면 answer에 len(nums), 즉 nums에 있는 폰켓몬 종류를 그대로 리턴해준다.
> 최대 N/2까지 고를 수 있기 때문에 만약 nums에 있는 종류가 N/2보다 더 많으면 N/2를 넣어주는거고 아니면 len(nums)만 넣어주는 것이다.
⭐ 느낀점
> 오늘도 아이디어 자체는 괜찮았던 것 같다. 깔끔했다고 생각한다. ㅎㅎ 근데 이걸 한줄로 끝내는 사람도 있더라. 신기하긴했다. 아이디어는 똑같았는데 min(a,b) 이걸 이용해서 바로 끝내버렸더라. 무작정 짧기만 하고 이해하기 어려운 코드는 좋은 것 같지는 않지만, 하나 배우긴 한 것 같다. min 쓸 생각을 못했다. 다른 사람들 코드도 참고하는 게 좋긴 하네~!
'알고리즘 공부 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / Level 1] 3진법 뒤집기 (파이썬) (0) | 2022.04.09 |
---|---|
[프로그래머스 / Level 1] 약수의 개수와 덧셈 (파이썬) (0) | 2022.04.08 |
[프로그래머스 / Level 1] 체육복 (파이썬) (0) | 2022.04.06 |
[프로그래머스 / Level 1] K번째수 (파이썬) (0) | 2022.04.05 |
[프로그래머스 / Level 1] 완주하지 못한 선수 (파이썬) (0) | 2022.04.04 |