[알고리즘] 프로그래머스_완주하지 못하는 선수

Fortice·2021년 6월 24일
0

알고리즘

목록 보기
4/18

1. 문제 분석

  • 알파벳 첫 글자대로 분류하고 개수가 다른거에서 비교하면 빠르지 않을까 생각했다.
  • 위 방법대로 하면 2번의 순회면 끝나지 않을까 생각했다.
  • 어떻게 보면 비효율적일거 같다 생각하다가, 둘다 정렬 하고 비교하면 코드 자체는 간단하다 생각했다.

2. 문제 풀이 과정(삽질)

  • 삽질은 딱히 없고 풀었다.
  • 알고보니 레벨 1의 간단한 문제

3. 문제 해결

  • 두 입력 벡터를 정렬하고 하나씩 비교했다.
  • 비교하다 다른 부분이 나오면 participant의 이름이 답이다.
  • completion.size()만큼만 비교하고 답이 안나오면 participant의 마지막이 답이다.

4. 코드

#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(participant[i] != completion[i])
            return participant[i];
    
    return participant.back();
}

5. 고수의 코드를 보고 배우기

  • 코스의 코드도 끝을 제외하고 같다.
#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(participant[i] != completion[i])
            return participant[i];
    }
    return participant[participant.size() - 1];
    //return answer;
}
profile
서버 공부합니다.

0개의 댓글