알고리즘/프로그래머스

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

히똔 2023. 1. 14. 05:29
728x90
반응형

풀이 문제 : 프로그래머스 코딩테스트 고득점 Kit - 해시 level1 : 완주하지 못한 선수
풀이 언어 : C++
알고리즘 : 정렬
문제링크 :https://school.programmers.co.kr/learn/courses/30/lessons/42576 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제요약


participant 과 completion 배열이 주어지는데 participant에는 있지만 completion에는 없는 한명의 이름을 출력하는 문제이다.

 

접근 방식


처음엔 단순히 2중 for문으로 비교하면 될거라고 생각했지만, 선수 수가 100,000명이기 때문에 비효율적일 것 같다고 생각했다.

그래서 두 배열을 sort 한 후, for문 한번으로 비교할 수 있도록 코드를 짰다.

또한, 만약 정답인 선수 이름이 sort 이후 participant의 마지막에 들어가있으면 확인이 불가능하기 때문에 이를 보완하기 위해 found 라는 boolean 변수를 만들어서 해당 부분을 예외처리 해주었다.

 

코드


#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());
    int len = completion.size();
    bool found = 0;
    
    for(int i=0;i<len;i++){
        if(participant[i] != completion[i]){
            answer = participant[i];
            found = 1;
            break;
        }
    }
    if(found == 0) answer = participant[len];
    
    return answer;
}

728x90
반응형