본문 바로가기

problem solving

[프로그래머스]완주하지 못한 선수

무작정 풀다보면 시간초과가 날 수 있는 문제다.

두 배열에서 같은 선수가 없다면 바로 return하면 되기 때문에 정렬을 해준다.

정렬된 배열에서 같은 이름을 가진 선수가 이어서 나온다면 다음 인덱스로 넘어가고 count++하여

두 배열에서 동명이인이 몇명인지 확인할 수 있도록 한다.

이름이 다르거나 동명이인의 수가 다르다면 리턴해서 결과를 얻으면 끝!

#include <string>
#include <vector>
#include <algorithm>
 
using namespace std;
 
string solution(vector<string> participant, vector<string> completion) {
    vector<int> val;
    string answer = "";
    sort(participant.begin(), participant.end());
    sort(completion.begin(), completion.end());
    int count1 = 1, count2 = 1;
    int j = 0, i = 0;
    while(true) {
        count1 = 1, count2 = 1;
        while(i < participant.size() - 1 && participant[i] == participant[i + 1]) {
            count1++;
            i++;
        }
        while(j < completion.size() - 1 && completion[j] == completion[j + 1]){
            count2++;
            j++;
        }
        if(participant[i] != completion[j] || count1 != count2) {
            answer = participant[i];
            return answer;
        }
        i++, j++;
    }
    
   return answer;
}
cs