

Problem
https://school.programmers.co.kr/learn/courses/30/parts/12077
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
연구실에 있는
폰켓몬은 종류에 따라 번호를 붙인다.
이중 가장 많은 종류의 폰켓몬을 가져갈 때, 그 종류의 개수를 return 해야 한다.
Input / Output Example
nums는 폰켓몬의 종류 번호가 담긴 1차원 배열이다.
nums: [3,1,2,3]
output: 2
Solution
해당 문제는 해시 카테고리로 분류되어 있다.
즉 해시를 사용하라는 문제이다.
파이썬의 set 자료구조는 해시함수를 이용해 해시테이블이라는 자료구조를 통해 데이터를 저장한다.
따라서 중복을 가질 수 없다.
이 자료구조를 활용하면, 리스트에서 중복을 쉽게 제거할 수 있다.
우리는 최대
들어온 nums 리스트의 길이를 반으로 나눈다.
그 다음 nums 리스트를 set 자료구조를 통해 구해 중복을 제거하고,
set의 길이를 구한다
만약 set의 길이가 nums 리스트의 길이보다 작거나 같다면
겹치는 종류가 있어
반면에 set의 길이가 nums 리스트이 길이보다 크면
아무리 많이 가져가도 최대
Code
def solution(nums):
length = nums.__len__() // 2
set_nums = set(nums)
set_length = set_nums.__len__()
if set_length <= length:
return set_length
else:
return length
여기서 리스트나 set 자료구조의 길이를 구하는 것은
파이썬이 내부에서 데이터가 추가되고 삭제될 때 미리 길이값을 구한다.
따라서 길이를 구하는 코드의 시간복잡도는
해당 코드는 얼핏 보면 시간복잡도가
set을 통해 리스트 내에 있는 인자를 하나하나 순회하며 set을 만든다.
따라서 해당 코드의 시간 복잡도는
'Coding > PS' 카테고리의 다른 글
프로그래머스 고득점 Kit - 이중 우선순위 큐 (0) | 2025.01.29 |
---|---|
프로그래머스 고득점 Kit - 올바른 괄호 (0) | 2025.01.28 |
프로그래머스 고득점 Kit - 더 맵게 (0) | 2025.01.28 |
프로그래머스 고득점 Kit - 다리를 지나는 트럭 (0) | 2025.01.28 |
프로그래머스 고득점 Kit - 프로세스 Python (1) | 2025.01.21 |
소프트웨어학과 현주씌의 일상을 담는 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!