풀었던 문제를 다시 풀어보자!
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
participant
배열에는 있지만 completion
배열에는 없는 원소를 찾으면 된다.if (completion[i] != participant[i]) {
answer = participant[i];
}
break
해야지 생각해놓고 다른 거 구현하다가 안해줬다.break
를 안 해주면 뒤에 나올 값들은 같은 인덱스일 때 대부분(동명이인 때문에 같을 수도 있음)
다른 값이기 때문에 answer
이 계속 갱신되어 오답을 return
한다.#include <string>
#include <vector>
#include <algorithm>
using namespace std;
string solution(vector<string> participant, vector<string> completion) {
string answer = "";
sort(participant.begin(), participant.end());
sort(completion.begin(), completion.end());
for(int i=0; i<completion.size(); ++i) {
if (completion[i] != participant[i]) {
answer = participant[i];
break;
}
}
if (answer == "") {
answer = participant[participant.size()-1];
}
return answer;
}
javaScript와 해시를 배우면서 정렬을 하지 않고 푸는 방법을 알게 되었다.
function solution(participant, completion) {
let answer = '';
let hs = new Map();
for (const x of completion) {
hs.set(x, (hs.get(x) || 0 ) + 1);
}
for (const x of participant) {
if (!hs.has(x) || hs.get(x) === 0) {
answer = x;
break;
}
hs.set(x, hs.get(x) - 1);
}
return answer;
}