카테고리 없음

강의용/ 프로그래머스 - 완주하지 못한 선수 c++

FireStone 2020. 7. 8. 20:34

풀려고 했는데 사실 이미 푼 문제라서 기록이 남아있었다..

푼건 알고있었지만 새롭게 풀고싶었는데 이미 코드가 보여서 어쩔 수가 없었다..

https://programmers.co.kr/learn/courses/30/lessons/42576

 

코딩테스트 연습 - 완주하지 못한 선수

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수��

programmers.co.kr

 

이 문제는 블로그에 기록을 안한것같아서 기억을 더듬어 보자면

이문제는 동명이인이 있다는게 문제였다

처음에는 find로 찾아서 풀었지만

동명이인때문에 find로 간단히 풀 수가 없었다. 

 

그래서 sort로 풀었는데 이게 오히려 더 간단하다..

 

logic 설계

1) 참가자 인원이 담긴 벡터와 완주자가 담긴 벡터를 정렬한다. 어떤식으로 정렬하든 상관없다.

아마 default가 오름차순 less였던 것 같다.

뭐 차순은 중요하지 않기때문에 정렬을 하고

2) 두 벡터를 비교한다.

정렬을 했기때문에 두 벡터는 똑같이 정렬됐을 것이고, 순서대로 비교하다보면 같지 않은 것을 발견할 수 있다.

3) 만약 두 벡터의 요소가 다르다면 그때 participant 벡터를 리턴해줘야한다! => 완주하지 못한 참가자이므로..

끄읏

처음에 정렬이라는 것만 생각해내면 되게 단순하게 풀 수 있는 문제다

#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<participant.size();i++){
        if(completion[i]!=participant[i])
            return participant[i];
    }
    return answer;
}