201004 완주하지 못한 선수(C++)
programmers.co.kr/learn/courses/30/lessons/42576
코딩테스트 연습 - 완주하지 못한 선수
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수��
programmers.co.kr
문제:
입력 값으로 participant 배열과 completion 배열이 주어집니다.
정답은 completion 배열에 없는 participant 값을 출력하는 것입니다.
completion은 participant 배열보다 find 함수를 사용하고, 크기도 1만큼 작다고 정해져 있어서 쉬운 문제라고 생각했습니다.
#include <string>
#include <algorithm>
#include <vector>
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(participant[i] != completion[i])
return participant[i];
}
return participant[participant.size() - 1];
}
코드:
두 벡터를 정렬 해서 값을 비교합니다. 두 값이 다를 때 participant의 이름을 정답으로 저장합니다.
if로 분기해서 answer에 저장하고 마지막에 answer를 리턴하면 효율성 0점과 정확성 10점을 받습니다.
그래서 마지막에 null 값을 확인하는 if 분기와 answer 저장을 지우고 답을 바로 리턴 했습니다.
-----------------------------------------------------------------------------------------------------------------------------------------------------------
풀고 나니까 해시를 사용하는 문제란걸 알았습니다. 해시를 이용했다면 이름을 인덱스로 사용해서 이름의 유무에 따라 값을 다르게 줘서 마지막에 해당 인덱스를 주면 될 것 같습니다.