티스토리 뷰
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