티스토리 뷰

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

 

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

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

programmers.co.kr


#1 문제

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

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

 

 

#2 제한사항

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

 

 

#3 입출력 예

participant completion return
["leo", "kiki", "eden"] ["eden", "kiki"] "leo"
["marina", "josipa", "nikola", "vinko", "filipa"] ["josipa", "filipa", "marina", "nikola"] "vinko"
["mislav", "stanko", "mislav", "ana"] ["stanko", "ana", "mislav"] "mislav"

 

 

#4 입출력 예 설명

예제 #1
"leo"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.

예제 #2
"vinko"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.

예제 #3
"mislav"
참여자 명단에는 명이 있지만, 완주자 명단에는 명밖에 없기 때문에한 명은완주하지 못했습니다.

 

 

#5 풀이

풀이 방법이 여러 가지지만 주제가 해시였기에 해시를 쓰는 방법으로 해결해보았다.

참여 선수를 key값으로 count를 value값으로 해시를 구성해서

["mislav", "stanko", "mislav", "ana"] 4명을 넣으면 다음과 같은 그림이 된다.

넣은 것을 반대로 completion 에 들어있는 이름들을 key값 검색해 count를 감소시킨다.

 

 

#5 소스코드

def solution(participant, completion):
    hash_participant = {}                              # 빈 해쉬 생성
    input_participant(hash_participant, participant)   # 해쉬에 참여선수들을 담음
    hash_completion(hash_participant, completion)      # 해쉬에 담은 참여선수와 비교해서 카운트 제거
    answer = remainder(hash_participant)               #남은 사람 출력
    print("정답은~~ ",answer)
    return answer

#참여선수 담기
def input_participant(hash_participant, participant):
    for loop in participant:
        value = hash_participant.get(loop)
        if value == None:
            hash_participant[loop] = 1;
        else:
            hash_participant[loop] = hash_participant.get(loop) + 1

#참여선수에서 완료선수 빼기
def hash_completion(hash_participant, completion):
    for loop in completion:
        hash_participant[loop] = hash_participant.get(loop) - 1

def remainder(hash_participant):
    for loop in hash_participant:
        if hash_participant[loop] == 1:
            return loop

if __name__ == '__main__':
    participant = ["mislav", "stanko", "mislav", "ana"]
    completion = ["stanko", "ana", "mislav"]
    solution(participant, completion)

 

'개발 > Programmers' 카테고리의 다른 글

[Programmers] 2lev : 전화번호 목록 - JAVA  (0) 2021.12.09
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday