programmingu

[프로그래머스][코딩연습/해시]완주하지 못한 선수 본문

coding test practice

[프로그래머스][코딩연습/해시]완주하지 못한 선수

예진잉구 2021. 1. 9. 03:56

programmers.co.kr/learn/courses/30/lessons/42576

 

코딩테스트 연습 - 완주하지 못한 선수

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수

programmers.co.kr

문제 설명

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.

마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.

 

제한사항

  • 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
  • completion의 길이는 participant의 길이보다 1 작습니다.
  • 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
  • 참가자 중에는 동명이인이 있을 수 있습니다.

해시 연습이라고 하는데 해시는 개념만 알고 코드로 구현해 본 적은 없었다. 그래서 일단 내가 아는 방식으로 구현해 보았다.

def solution(participant, completion):
    participant.sort()
    completion.sort()
    for i in range(len(completion)):
        if participant[i]==completion[i]:
            continue
        else:
            answer=participant[i]
            return answer
    answer = participant[len(completion)]
    return answer

먼저 participant와 completion을 오름차순으로 정렬한 뒤 첫번째 요소부터 차례대로 같은지 확인한다.

다시보니 

        if participant[i]==completion[i]:
            continue
        else:
            answer=participant[i]

이 부분을 if participant[i]!=completion[i]: 로 고치는 게 더 간단하게 쓸 수 있다.

 

하지만 이렇게 푸는 방식은 출제의도와 다르다고 생각했다.

def solution(participant, completion):
    hash = {} # 딕셔너리 형식 key: 사람이름 value: 명수(참가자-완주자)
    for part in participant:
        if part in hash: # 참가자 이름이 hash의 key이다. key가 존재하면?
            hash[part] += 1 # 동명이인이라고 생각하고 value를 한명 추가한다.
        else:
            hash[part] = 1 # key:part value:1로 추가한다.
    for comp in completion:
        if hash[comp] == 1:
            del hash[comp]
        else:
            hash[comp] -= 1
    answer = list(hash.keys())[0] # 남은 key의 list를 출력하면 완주 못한 사람의 이름 리스트가 뜬다.
    return answer

프로그래머스에서는 문제를 풀고 나서 모법답안을 추천 순으로 볼 수 있어서 좋다.

hash와 dict는 비슷하다고 생각한다.. 모범답안이 잘 이해가 안돼서 구글에 좀 찾아 보고 그걸 참조해서 코드를 구현했다. 그리고 주석에 이해할 수 있도록 설명을 추가했다. 참고한 블로그는 아래에 링크로 달겠다.

 

그런데 자료구조 및 알고리즘 수업에서 배운 hash랑은 이용하는 방법이 좀 달라서.. 더 생각해 보아야겠다.

 

 

참고: davinci-ai.tistory.com/32?category=905792 (감사합니다.)