TODAY TIL
안녕하세요! 이번 포스팅에서는 폰켓몬 선택과 관련된 흥미로운 코딩 문제를 다뤄보겠습니다. 단계적으로 설명하고 코드 구현을 공유합니다.
문제 설명
여러분은 오랜 여행 끝에 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 여러분에게 연구실에 있는 N마리의 폰켓몬 중 N/2마리를 선택해도 좋다고 했습니다. 같은 종류의 폰켓몬은 같은 번호를 가지며, 여러분은 최대한 다양한 종류의 폰켓몬을 선택하고 싶습니다.
문제의 목표: N마리의 폰켓몬 중 최대 N/2마리를 선택할 때, 가장 다양한 종류의 폰켓몬을 선택하는 경우를 찾고, 그때의 폰켓몬 종류의 수를 반환하는 것입니다.
제한사항
- nums는 폰켓몬의 종류 번호가 담긴 1차원 배열입니다.
- N은 항상 짝수이며, 1 이상 10,000 이하의 자연수입니다.
- 폰켓몬의 종류 번호는 1 이상 200,000 이하의 자연수입니다.
단계별 해결 방법
- 입력 분석:
- nums 배열에는 각 폰켓몬의 종류 번호가 포함되어 있습니다.
- 배열의 길이 N은 항상 짝수입니다. 따라서 N/2마리의 폰켓몬을 선택할 수 있습니다.
- 중복 제거:
- set 자료형을 사용하여 배열에서 중복을 제거하고 고유한 폰켓몬 종류의 수를 구합니다.
- 최대 선택 가능한 폰켓몬 수 계산:
- 선택할 수 있는 최대 종류의 개수는 min(len(unique_pokemon), N // 2)입니다.
- len(unique_pokemon)은 중복 제거 후 고유한 종류의 개수입니다.
- N // 2는 선택할 수 있는 폰켓몬의 총 수입니다.
- 선택할 수 있는 최대 종류의 개수는 min(len(unique_pokemon), N // 2)입니다.
- 코드 구현
def solution(nums):
# 중복 제거 후 고유한 폰켓몬 종류의 수 계산
unique_pokemon = set(nums)
# 선택할 수 있는 폰켓몬 종류의 최댓값 계산
return min(len(unique_pokemon), len(nums) // 2)
코드 설명
- set(nums)를 사용하여 nums 배열에서 중복된 종류 번호를 제거합니다.
- min(len(unique_pokemon), len(nums) // 2)를 사용해 선택할 수 있는 폰켓몬 종류의 최대 개수를 계산합니다.
- 고유한 폰켓몬 종류의 수(len(unique_pokemon))가 선택 가능한 수(N/2)보다 작으면 모든 고유 종류를 선택할 수 있습니다.
- 고유한 폰켓몬 종류의 수가 N/2보다 크다면 N/2만큼의 고유 종류만 선택할 수 있습니다.
예제
입력: nums = [3, 1, 2, 3]
- set(nums) 결과: {1, 2, 3} (고유한 폰켓몬 종류: 3개)
- 선택할 수 있는 최대 개수: len(nums) // 2 = 2
- 반환값: min(3, 2) = 2
결과: 최대 2종류의 폰켓몬을 선택할 수 있습니다.
결론
이 문제는 배열에서 중복된 항목을 제거하고 선택할 수 있는 폰켓몬의 종류를 비교하는 간단한 문제였습니다. 중복 제거를 위한 set 사용과 최소값 계산을 통해 다양한 경우를 쉽게 처리할 수 있었습니다.
이제 여러분도 다양한 알고리즘 문제를 해결할 때 중복 제거와 최소값 계산을 활용해 보세요!
'python' 카테고리의 다른 글
99클럽 코테 스터디_4기 12일차 TIL (3) | 2024.11.09 |
---|---|
99클럽 코테 스터디_4기 11일차 TIL (0) | 2024.11.08 |
99클럽 코테 스터디_4기 9일차 TIL (0) | 2024.11.05 |
99클럽 코테 스터디_4기 8일차 TIL (0) | 2024.11.05 |
99클럽 코테 스터디_4기 7일차 TIL (0) | 2024.11.04 |