본문 바로가기

study/파이썬

[python] 프로그래머스 - 해시 level 1 (딕셔너리 개념 정리)

코딩테스트 연습 : 해시 level 1 완주하지 못한 선수

해시는 Key-value 쌍으로 데이터를 저장하는 자료구조

시도 1 : 해시 사용 X

def solution(participant, completion):
    answer = ''
    for i in range(len(participant)):
        if participant[i] in completion:
            index = completion.index(participant[i])
            del completion[index]
        else:
            answer = participant[i]
            break
    return answer

시도 1 실행결과

시도 2 : 해시 사용

해시 = 딕셔너리 -> key 와 value로 이루어짐

딕셔너리 특징

1. 값이 입력한 순서와 상관없이 무작위로 저장 -> 인덱스 접근 X

2. 데이터에 접근할 땐 key값을 사용하여 접근

3. 저장된 key값은 변경이 불가능, 같은 이름의 key값 가질 수 없음. -> 중복 key값이 들어오면 기존 값이 삭제됨

4. 저장된 value값은 수정, 중복 가능

# 딕셔너리 구조
dictionary = {
	'key1' : 'value1'
    'key2' : 'value2'
    'key3' : 'value3'
}

# 값 불러오는 방법 : 키를 사용해 값에 접근
print(dictionary['key2']) 
# 값만 불러오는 방법
print(dictionary.values())
# 키만 불러오는 방법
print(dictionary.keys())

 

문제풀이

제한 사항 : 동명이인, completion 의 길이는 participant의 길이보다 1 작음, 알파벳 소문자

딕셔너리를 사용하여 참가자 이름은 key 값으로, value 값은 해당 이름의 개수로 지정한다.

첫번째 반복문을 만들어 해시 딕셔너리에 participant 이름이 없으면 value 값을 1로, 있으면 + 1 을 해준다.

두번째 반목문에서는 completion 이름의 key 값에 대응하는 해시 딕셔너리의 value 값이 1이면 해당 매핑 값들을 삭제하고, 1이 아닐 경우 value 값 - 1을 해준다.

두번째 반복문이 끝나면 해시 딕셔너리에는 1개의 key와 value 가 남게 되고, hash.keys()를 사용 하게 되면 dict_keys(['key']) 와 같이  Key만을 모아서 dict_keys 객체를 돌려준다. 따라서 list(hash1.keys())[0] 을 사용하여 객체가 아닌 값을 answer에 넣어준다.

def solution(participant, completion):
    answer = ''
    hash = {}
    for i in participant:
        if i in hash:
            hash[i] += 1
        else:
            hash[i] = 1
    for i in completion:
        if hash[i] == 1:
            del hash[i]
        else:
            hash[i] -= 1
    answer = list(hash.keys())[0]
    return answer