CodingTest Practice/Programmers

프로그래머스 : 완주하지 못한 선수(C++, Lv.1, 정렬 이용)

몽땅마니아(MDD) 2022. 5. 18. 17:28

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

 

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

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

programmers.co.kr

풀이방법:

참여자 명단과 완주자 명단을 이름순으로 정렬해 두 명단을 순서대로 비교해 나아간다.

이름이 다른 경우 참가자명단에 있는 선수는 완주하지 못한 것이므로 해당 선수의 이름을 반환한다.

왜 나는 해시 방법으로 풀지 않은 것인가,,,, 남의 풀이 좀 봐야겠다...

 

c++ string에서 문자열을 어떻게 비교하는지 몰라서 아래 블로그를 찾아보았다.

문자열 비교함수 : str1.compare(str2)

같으면 0 반환, 매개변수보다 사전순으로 빠르면 음수(-) 반환, 사전순으로 느리면 양수(+) 반환

https://blockdmask.tistory.com/338

 

[C++] string 클래스, 문자열에 대해서 (총정리)

안녕하세요 BlockDMask 입니다.오늘은 C++의 std::string 클래스(문자열)에 대해서 세세 하게 알아볼것 입니다.예전 글을 보다가 제가 작성한 이 문서를 보게 되었는데요, 너무 내용이 빈약하다고 생

blockdmask.tistory.com

소스코드

#include <bits/stdc++.h>

using namespace std;


string getName (vector<string> participant, vector<string> completion) {
    int cnt = completion.size(); 
    string par, com;
    // 정렬된 명단을 처음부터 살피며 같은 이름인지 확인
    for(int i=0; i<cnt;i++) {
        par = participant[i];
        com = completion[i]; 
        // 이름이 다르다면 해당 선수의 이름 출력
        if(par.compare(com)!=0) return par;
    }
    //완주한 선수 명단을 모두 확인했으므로 참가자 명단의 마지막 선수 출력
    return participant[cnt];
}

string solution(vector<string> participant, vector<string> completion) {
    string answer = "";
    // 참여 명단과 완주 명단을 algorithm 헤더의 sort를 통해 이름 순으로 정렬
    sort(participant.begin(), participant.end());
    sort(completion.begin(), completion.end());
    
    // 완주하지 못한 선수의 이름을 return 하는 함수 실행
    answer = getName(participant, completion);
    
    return answer;
}