https://programmers.co.kr/learn/courses/30/lessons/42576?language=python3
def solution(participant, completion):
answer = ''
d = {}
for i in completion:
if i not in d:
d[i] = 1
else:
d[i] += 1
for i in participant:
if i not in d or d[i] == 0:
answer = i
break
else:
d[i] -= 1
return answer
리스트로 돌리면서 비교하면 갯수가 10만이기때문에 시간복잡도가 오바될것같아
hash로 구현했다.
완주자 리스트를 먼저 만들어둔후, 참가자 리스트를 for문 돌리며 만들어진 리스트에서 하나씩 빼준다. 만약 빼려는 참가자가 완주자리스트에 존재하지않을경우 해당 참가자가 범인이다!
동명이인이 있을수있기에 완주자리스트도 이름별로 숫자를 쌓는식으로 만들었다.
def solution(participant,completion):
participant.sort()
completion.sort()
for par, com in zip(participant, completion) :
if par != com :
return par
return s[-1]
다른풀이를 보다가 zip이라는걸 처음 봤다
>>> list(zip([1, 2, 3], [4, 5, 6]))
[(1, 4), (2, 5), (3, 6)]
>>> list(zip([1, 2, 3], [4, 5, 6], [7, 8, 9]))
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
>>> list(zip("abc", "def"))
[('a', 'd'), ('b', 'e'), ('c', 'f')]
요런식으로 쓴다.
ex1)
print(list(zip([1,2,3,4], [10,20,30])))
----->[(1, 10), (2, 20), (3, 30)]
ex2)
a = [1,2,3,4]
b = [10,20,30]
for p,q in zip(a,b):
print(p,q)
----->
1 10
2 20
3 30
두 리스트의 갯수가 다를경우 짧은것 기준으로 맞춰지고 짝을 이룰수 없는 나머지는 아무일도 안생긴다.
다른풀이는 이걸 이용했다.
호기심에 시간비교 한번 해봤다
solution1 이 내 풀이
solution2 가 같이올린 다른풀이이다.
테스트케이스를 긴걸로 하고싶어서 프로그래머스에서 예시로 준거중 제일 긴거로 했는데 그래봤자 5개밖에 안되서.. 더 길어지면 어떻게 바뀔지 모르겠지만
일단 다른풀이가 조금더 빠른것같다!..
끝