본문 바로가기
Algorithm/Programmers

[프로그래머스] 코딩테스트 고득점 Kit > 완주하지 못한 선수

by du.it.ddu 2019. 11. 5.
반응형

# 문제

# 문제 접근

participant에 존재하는 이름 중에 completion에 존재하지 않는 이름을 찾아서 return하면 되는 문제다.

제한사항에서 "참가자 중에는 동명이인이 있을 수 있습니다." 라는 문구가 있는 것과 입출력 예의 세번 째를 참고하면 같은 이름을 가진 참가자가 있고 답이 그 이름일 때 어떻게 처리할 것인가가 중요 포인트인 것 같다.

또한 참가자 수가 100,000명까지 가능하기 때문에 N^2으로 풀면 시간초과가 날 가능성이 있다는 것을 염두하자.

# 문제 풀이

1. 동명이인이 존재할 수 있기 때문에, 특정 이름이 몇명이 존재하는 지 구분할 수 있어야 한다. 즉 "어떤 이름" : "몇 명" 이란 데이터를 저장할 수 있어야 하는데, 이 형태는 (키 : 값) 을 띄고 있기 때문에 "이름"을 "키"로, "몇 명"을 "값" 으로 딕셔너리 자료구조를 사용하여 저장하자. 

2. completion 리스트에 저장 되어있는 이름들에 대하여 위에서 저장한 딕셔너리에서 값을 하나씩 감소시켜 주자. 값이 0이 된 값은 완주한 이름이 되며, 값이 1인 이름이 정답이 된다.

# 코드 작성

def solution(participant, completion):
    answer = ''
    participant_dict = {}
    
    # 1. participant를 순회하며 딕셔너리 생성
    for p in participant :
        if p not in participant_dict :
            participant_dict[p] = 1
            
        else :
            participant_dict[p] += 1
    
    # 2. completion를 순회하며 값 1씩 감소
    for c in completion :
        name_count = participant_dict[c]
        participant_dict[c] = name_count - 1
    
    # 3. 값이 0이 아닌 이름을 찾아 저장 후 반환
    for p in participant :
        if participant_dict[p] != 0 :
            answer = p
            break
    
    return answer

 

 * 본 문제의 출처는 프로그래머스(https://programmers.co.kr/) 입니다. 문제가 될 시 삭제하겠습니다.

반응형