<로직 고민/>
- 오잉 participant를 돌리면서 completion에 해당하는 이름이 있으면 빼면 되는 거 아닌가??
def solution(participant, completion):
answer = ''
for marathoner in participant:
if marathoner in completion:
participant.remove(marathoner)
print(participant)
return answer
- 이렇게 했는데 왜 안 되지..? participant에 한 명만 남아야 하는데 다 2명씩 남는다 뭐지..?
def solution(participant, completion):
answer = ""
while True:
if participant[-1] in completion:
participant.pop()
else:
answer = participant[-1]
break
return answer
- 이렇게 하니까 이제 3번째 예시에서 인덱스에러가 뜬다
- 동명이인 때문에 그러는 거 같아서
- 완주 명단에 있으면 완주 명단에 있는 이름도 같이 뺐다
...
finish = participant.pop()
completion.remove(finish)
...
- 5번째 줄을 finish라는 변수에 담고 그 아래줄을 추가했다
- 이렇게 하니까 예시 3개는 통과하는데 채점하니까 효율성에서 시간초과로 탈락이다 ㅠ
- 음....일단 그러니까 in을 쓰는 건 버려야겠다
- 차라리 이름 별로 정렬을 하고 participant랑 completion을 비교해서 다르면 그때의 participant가 답이 되지 않을까
def solution(participant, completion):
participant.sort()
completion.sort()
completion.append("nothing")
for p, c in zip(participant, completion):
if p != c:
return p
- 이렇게 하니까 일단 예시 3개는 통과했다
- 4번째 줄에 nothing을 추가해준 이유는 completion이 하나 모자라기 때문에 개수를 맞춰주기 위함이다
- 2번 예시처럼 정답이 맨 끝에 위치하게 됐는데 completion이 하나 모자라면 null 값이 뜨기 때문...
- 흠 근데 정렬을 하는 게 맞나..? 정렬하는 것도 시간 오래 걸리지 않나?
- 일단 채점 ㄱㄱ
- 오 됐다,,
<완성된 풀이/>
def solution(participant, completion):
participant.sort()
completion.sort()
completion.append("nothing")
for p, c in zip(participant, completion):
if p != c:
return p
<다른 사람 풀이/>
- 천재풀이1
import collections
def solution(participant, completion):
answer = collections.Counter(participant) - collections.Counter(completion)
return list(answer.keys())[0]
- 와 이건 또 뭐래...
- Counter 객체라서 빼기 연산이 가능한 거라고 하넹,,,,흠,,,,
- 신기하군...
- 천재풀이2
def solution(participant, completion):
participant.sort()
completion.sort()
for p, c in zip(participant, completion):
if p != c:
return p
return participant[-1]
- null값이 나와서 participant랑 completion 길이를 맞춰줘야 하는구나 하고 nothing을 넣었는데 그냥 이렇게 하면 되는거였군...
- 이 풀이가 더 좋은 것 같다 사람 이름이 nothing일 수도 있으니까...
- 물론 nothing 말고 숫자 0 이나 1 이런 거 넣으면 절대 사람 이름과 겹칠 일은 없겠지만...!
<수정/>
def solution(participant, completion):
participant.sort()
completion.sort()
completion.append(-1)
for p, c in zip(participant, completion):
if p != c:
return p
- 사람 이름이 nothing일 수도 있으니까 절대 사람 이름과 겹칠 일 없게 completion 맨 끝에 -1을 추가해주었다