문제
programmers.co.kr/learn/courses/30/lessons/1845
처음 작성한 코드
def solution(nums):
leng = len(nums)//2
nums = set(nums)
if len(nums)<leng:
return len(nums)
return leng
코드 리뷰 후
def solution(nums):
return min(len(set(nums)),len(nums)//2)
깨달은 점
- 처음에는 combinations를 사용하여 모든 조합을 만들어놓고 set(len())을 이용하여 길이가 제일 긴 조합의 길이를 반환하려고 했는데 시간 초과가 났다. 그래서 다시 생각해보니까 먼저 set()을 걸어놓으면 될 것 같았다. set을 해놓고 leng만큼 combinations을 했는데 컴파일 에러가 났다. 이유를 생각해보니 만약 nums = [1,1,1,1] 이면 set(nums) -> {1} 이게 되고 leng == 2이기 때문에 에러가 나는 것이었다. 그러면 처음에 set(nums)와 leng을 비교하여 위와 같은 경우라면(set()이 더 작으면) set(nums)의 길이를 반환하고, 아니면 combinations을 또 해서 그 중 길이가 제일 긴 조합의 길이를 반환하려고 했는데 생각해보니 저 위의 조건에서 안 걸리면 어찌됐든 len(nums)//2 만큼 뽑히는 거기 때문에 그냥 len(nums)//2를 반환하게 작성했다.
'Programmers' 카테고리의 다른 글
[프로그래머스] n진수 게임 (0) | 2021.02.05 |
---|---|
[프로그래머스] 짝지어 제거하기 (0) | 2021.01.30 |
[프로그래머스] 소수 만들기 (0) | 2021.01.28 |
[프로그래머스] 영어 끝말잇기 (0) | 2021.01.28 |
[프로그래머스] 순위 검색 (0) | 2021.01.27 |