코딩 테스트 연습. python(1) - 완주하지 못한 선수

min_chan·2023년 1월 15일
0

코딩 테스트 연습

목록 보기
1/5
post-thumbnail

컴퓨터 아이콘 제작자: Freepik - Flaticon


  • 문제 설명

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

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


  • 제한사항

  1. 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.

  2. completion의 길이는 participant의 길이보다 1 작습니다.

  3. 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
    참가자 중에는 동명이인이 있을 수 있습니다.


  • 입출력 예

  • 입출력 예 설명

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

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

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


  • Solution 1(Sort & length)

def solution(participant, completion):
    #각 리스트 정렬
    participant.sort()
    completion.sort()

    #completion list의 length만큼 반복문을 사용하여  particioant에만 존재하는 한 명 찾기 
    for i in range(len(completion)):
        if participant[i] != completion[i]:
            return participant[i]

    # completion list를 다돌고 나서도 한 명을 못찾을 경우 cparticipant list의 마지막 사람이 완주하지 못한 한명이다.
    return participant[-1]

  • Solution 2(hash활용)

def solution(participant, completion):

    hashDict = {}
    sumHash = 0
    # particioant의 리스트의 hash를 구하고, 합을 구한다.
    # ex) hashDict안의 value 값이 leo = 3, kiki = 7, eden = 13이 주어졌다고 가정하고 그 것들의 합(sumHash) = 18이 된다.
    
    for p in participant:
        hashDict[hash(p)] = p
        sumHash += hash(p)

    # completion list의 hash를 빼준다.
    # ex) kiki = 7, eden = 13을 더한 것과의 차이를 구한다.  
    for c in completion:
        sumHash -= hash(c)

    # 남은 값이 완주하지 못한 선수의 hash값이 된다.
    return hashDict[sumHash]

  • Solution 3(Counter활용)

 # Counter는 colletions라는 모듈안의 하나의 클래스로 리스트 형태를 딕셔너리(갯수) 형태로 변환한다.
 from collections import Counter
 
 def solution(participant, completion):
     # participant의 counter를 구한다.
     p_counter = Counter(participant)

     # completion의 카운터를 구한다.
     c_counter = Counter(completion)

     # 두 카운터의 차를 구하고 key를 구한다.
     answer = p_counter - c_counter
     return list(answer.keys())[0]

0개의 댓글