2/프로그래머스
프로그래머스 연습 문제 - 완주하지 못한 선수
하례은
2020. 9. 8. 01:33
programmers.co.kr/learn/courses/30/lessons/42576
코딩테스트 연습 - 완주하지 못한 선수
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수��
programmers.co.kr
해시 문제
def solution(participant, completion):
maraton = {}
for i in partivipant:
maraton[i] = maraton.get(i,0) + 1
for i in completion:
maraton[i] -= 1
answer = [k for k,v in maraton.items() if v == 1]
return answer[0]
처음에 이용한 방법.
왜인지 -=maraton[i] -= 1 에서 keyError가 나고 테스트 결과는 3가지 중에 한가지밖에 성공하지 않아서 계속 코드를 바꿔줬다. 그래도 안됨... vscode는 가능한데...
아직까지 왜 안되는지 모르겠다..
#get()
maraton.get(i,0)
~정렬을 이용한 방법
def solution(participant, completion):
participant.sort()
completion.sort()
for i in range(len(completion)):
if participant[i] != completion[i]:
return participant[i]
return participant[len(participant)-1]
다른 방법을 사용한 것이 정렬 방법. sort()을 통해 오름차순으로 정렬하고 participant와 completion을 비교한다. 이걸 쓰니 바로 정답...
#sort()
participant.sort()
completion.sort()
오름차순으로 정렬.
#zip()
for x,y in zip(participent, completion):
if x != y
return x
두 개 이상의 리스트나 스트링을 받아 인덱스에 맞게 for in 문제에서 하나씩 던져줄 수 있다. zip()을 이용하면 range를 이용한것보다 더욱 간단하게 사용가능하다.
~ counter을 이용한 방법.
문제를 풀고 다른사람이 푼 방법을 봤을때 진짜 감탄했던 방법. 이렇게 풀 수 있구나 하고 한 수 배웠다....
import collections
def solution(participant, completion):
answer = collections.Counter(participant) - collections.Counter(completion)
return list(answer.keys())[0]
#counter()
import collections
str = "hello"
answer = collections.Counter(str)
print(answer) #Counter({'l': 2, 'h': 1, 'e': 1, 'o': 1})
import collections
str = ["hi","my","hi","apple","name","this"]
answer = collections.Counter(str)
print(answer) #Counter({'hi': 2, 'my': 1, 'apple': 1, 'name': 1, 'this': 1})
항목의 개수를 셀때 사용하는 모듈.
두개의 카운터가 있을 경우 더할수도, 뺄수도 있고 합집합, 교집합, 차집합 연산이 가능하다.