접근 방법
- 참가자 명단 중 완주자 명단에 없는 사람 찾아 리스트에 추가
- 리스트의 길이가 0이라면 동명이인이 완주를 못했으므로 동명이인을 찾아 정답 도출
이렇게 풀었더니 틀렸다..
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
string solution(vector<string> participant, vector<string> completion) {
string answer = "";
unordered_map <string, int> temp;
for(string c : completion){
temp[c]++;
}
for(string p : participant){
temp[p]--;
if(temp[p] < 0) {
answer = p;
break;
}
}
return answer;
}
from collections import Counter
def solution(participant, completion):
answer = [x for x in participant if x not in completion]
if len(answer) == 0:
temp = Counter(participant)
for k, v in temp.items():
if v > 1:
answer.append(k)
return answer[0]
제법 파이써닉하게 풀었다며 스스로 뿌듯해했으나,, 틀리는 케이스도 있고 반복문이 많이 사용되어 효율성이 쓰레기였다 ( ͒ ́ඉ .̫ ඉ ̀ ͒)
C++로 풀었던 방법을 참고해 다시 풀어보았다.
접근 방법
- 완주자 명단을 키로 딕셔너리에 인원과 함께 추가
- 참가자 명단을 키로 딕셔너리 값 감소
- 값이 음수가 되면 완주하지 못한 사람
from collections import Counter
def solution(participant, completion):
temp = Counter(completion)
for p in participant:
temp[p] -= 1
if(temp[p] < 0):
return p
Counter 좋다.. 까먹지 말아야지
from collections import Counter
def solution(participant, completion):
answer = Counter(participant) - Counter(completion)
return list(answer.keys())[0]
딕셔너리.. 빼기가 가능하구나
굳이 반복문을 돌릴 필요가 없었다니...!!ㅜㅜ