프로그래머스 완주하지못한선수<Python>

푸른하늘·2022년 3월 18일
0
post-thumbnail

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

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

<제한 사항>

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

<입출력 예>

participantcompletionreturn
["leo", "kiki", "eden"]["eden", "kiki"]"leo"
["marina", "josipa", "nikola", "vinko", "filipa"]["josipa", "filipa", "marina", "nikola"]"vinko"
["mislav", "stanko", "mislav", "ana"]["stanko", "ana", "mislav"]"mislav"

<문제 해결>

  1. participant에는 있고 completion에는 없는 한 명을 찾아라
  2. 각 각 P, C 배열에 중복되는 값(동명이인)이 있을 경우 순서는 중요하지 않다
  3. 우리가 찾아야 하는것은 participant = p 배열과 completion = c 를 확인한다.
  4. c 배열에 남아있는 사람만큼 for문을 돌린다
  5. 이때 sort된 배열 안에 서로 값을 비교했을 때 값이 다르면 p 의 배열에 있는 값을 뽑아낸다
  6. 그럼에도 값이 나오지 않는경우는 마지막인 경우이기 때문에 p[i] = 마지막 배열 값

    return participant[len(participant) -1] 을 해준다.
def solution(participant, completion):
	# 1. 두 리스트를 sorting을 한다.
	participant.sort()
    completion.sort()
    
    #2. completion list의 lenght만큼을 돌면서, participant() 에만 존재하는 한 명을 찾는다.
    for in range(len(completion):
    	if participant[i] != completion[i]:
        	return participant[i]
            
    return participant[len(participant[i]) -1] #3.그럼에도 안나오면 마지막인덱스를 찾아간다.
            

<Hash 를 이용한 방법 >

def solution(participant, completion):
	hashDict = {}
    sumHash = 0 
    # 1. participant list의 구하고 ,hash 값을 더한다
    for part in participant:
    	hashDict[hash(part)] =  part
        sumHash += hash(part)
    # 2. completion list 의  hash을 빼준다.
    for comp in completion:
    	sumHash -= hash(comp)
    # 3. 남은 값이 완주하지 못한 선수의 hash 값이 된다.
    
    return hashDict[sumHash]
profile
Developer-Android-CK

0개의 댓글