목차
사탕 종류
현수는 사탕을 좋아합니다. 현수에게 사탕이 n개 있습니다.
현수 엄마는 현수가 요즘 너무 사탕을 많이 먹어 건강에 좋지 않다고 생각해 현수에게 가지고 있는 사탕의 절반(n/2)개만 먹으라고 했습니다. n은 항상 짝수입니다.
매개변수 nums에 현수가 가지고 있는 n개의 사탕의 종류 정보가 주어지면 현수가 n/2개의 사 탕을 먹는다면 최대 몇 종류의 사탕을 먹을 수 있는지를 반환하는 프로그램을 작성하세요.
제한사항:
• nums의 길이는 100,000을 넘지 않습니다.
• nums[i]는 i번재 사탕의 종류를 의미합니다. nums[i]값이 같으면 같은 종류의 사탕입니다. • 1 <= nums[i] <= 1,000
나의 코드
from collections import Counter
def solution(nums):
answer = 0
CC=Counter(nums)
if len(CC)>=len(nums)//2:
answer=len(nums)//2
else:
answer=len(CC)
return answer
print(solution([2, 1, 1, 3, 2, 3, 1, 2]))
print(solution([1, 3, 5, 7, 2, 3, 7, 5, 3, 2, 5, 7, 9, 12]))
print(solution([5, 5, 5, 5, 5, 5]))
print(solution([12, 23, 11, 3, 5, 23, 23, 23, 23, 23, 23, 23]))
print(solution([100, 200, 300, 400, 500, 600, 700, 800]))
이전에 배운 해시의 Counter에 너무 깊은 감명에 빠졌는지 바로 Counter를 사용하는 로직이 떠올랐다..!
뭐 우선 전체적으로 코드는 논리적으로 깔끔하게 잘 짠것같다.
정답 코드
def solution(nums):
n = len(nums)
cnt = 1
nums.sort()
for i in range(1, n):
if nums[i-1] != nums[i]:
cnt += 1
return cnt if cnt < n//2 else n//2
print(solution([2, 1, 1, 3, 2, 3, 1, 2]))
print(solution([1, 3, 5, 7, 2, 3, 7, 5, 3, 2, 5, 7, 9, 12]))
print(solution([5, 5, 5, 5, 5, 5]))
print(solution([12, 23, 11, 3, 5, 23, 23, 23, 23, 23, 23, 23]))
print(solution([100, 200, 300, 400, 500, 600, 700, 800]))
역시 정렬 파트여서 그런가 정렬을 사용한 코드이다.
정답 코드 역시 간결하고 가독성이 좋은 코드 같다.
이후 정렬 문제들은 다른 자료구조가 생각이 나도 정렬을 활용하는 코드로 짜도록 짱구를 굴려 봐야겠다.
'코딩테스트[파이썬] > 입문자를 위한 코딩테스트 핵심' 카테고리의 다른 글
[정렬] - 두수의 합 (0) | 2024.01.22 |
---|---|
[정렬] - 두 수의 차 (0) | 2024.01.22 |
[시물레이션] -위험지역 (0) | 2024.01.22 |
[시물레이션] - 로봇의 이동 (0) | 2024.01.22 |
[시물레이션] -청소로봇 2 (0) | 2024.01.22 |