이직하고만다(분노)
[3기] 99클럽 코테 스터디 6일차 TIL : 프로그래머스 해시
xxo_ohii
2024. 7. 28. 01:36
728x90
- 오늘의 학습 키워드 : 해시(Hash)
- 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/1845
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- 제출한 코드 :
def solution(nums):
count = 0
answer = ""
# 2/n 갯수의 폰켓몬을 골라야함
# 다양한 숫자있으면 경우의 수가 다양함
# 우선 갯수를 뽑는 함수 len() : 문자열길이 반환 을 사용함
count = len(nums)/2
# 랜덤으로 많은 종류의 숫자를 뽑을 수 있게하기
# 근데 중복은 피하고 싶어하는 듯 함.
# set() 함수 써서 중복제거
nums_tmp = set(nums)
# 중복제거 된 값들 리스트화
nums_tmp_cnt = len(list(nums_tmp))
answer = min(count,nums_tmp_cnt)
return answer
- 오늘의 회고
왜 해시문제라고 해놓고 hash()함수를 안썼지? 할수도있는데
set() 자료구조가 내부적으로 해시 테이블을 사용하기 때문이다.
파이썬에서의 set() 은 중복을 허용하지 않고고유한 요소만 저장하는 요소라 각 요소를 해시하여 저장한다.
해시 테이블의 주요 특징은 다음과 같다
- 빠른 조회 시간: 해시 테이블은 평균적으로 O(1)의 시간 복잡도로 요소를 조회할 수 있다.
- 중복 제거: 해시 테이블은 중복 요소를 허용하지 않는다.
다음은 문제를 다시 설명하면서 왜 set이 해시를 사용하는지 설명하는 좀 더 간결한 코드다:
def solution(nums):
# 주어진 폰켓몬 리스트에서 고유한 종류의 폰켓몬 수를 계산합니다.
unique_pokemon = len(set(nums)) # 'set'은 해시 테이블을 사용하여 중복을 제거하고 고유한 요소만 저장합니다.
# 선택할 수 있는 폰켓몬 수는 N/2 입니다.
max_pokemon_to_choose = len(nums) // 2
# 고유한 폰켓몬 수와 선택할 수 있는 폰켓몬 수 중 작은 값을 반환합니다.
return min(unique_pokemon, max_pokemon_to_choose)
# 예제 입력
nums = [3, 1, 2, 3]
print(solution(nums)) # 출력: 2
여기서 set(nums)는 nums 리스트에서 중복을 제거하고 고유한 요소들만 남기는 역할을 한다.
set은 내부적으로 해시 테이블을 사용하므로, 각 요소를 해시하여 저장하고 관리한다.
이로 인해 중복 요소를 자동으로 제거할 수 있음.
따라서, set을 사용하여 중복을 제거하고 고유한 폰켓몬의 종류를 효율적으로 계산하는 방식이다!
728x90