[프로그래머스/c++] Level 1: 완주하지 못한 선수

somyeong·2022년 4월 11일
0

프로그래머스

목록 보기
1/14
post-thumbnail

문제 링크 - https://programmers.co.kr/learn/courses/30/lessons/42576

🌱 문제

🌱 풀이 1 - 정렬 이용

  • vector participant와 completion을 각각 정렬한다
  • 1명만 완주를 못한것이므로, participant와 completion을 처음부터 비교하다가 다른값이 나오면, 그 선수가 완주를 못한 선수이다.
  • for문을 completion.size() 기준으로 돌린다면, participant의 마지막 선수가 완주하지 못한 선수일 때, 찾을 수 없으므로 participant.size()를 기준으로 돌렸다.
  • 답은 1명이니까 찾자마자 즉시 break 종료해서 그 선수를 리턴해주면 된다.

🌱 코드 1

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

🌱 풀이 2 - map 이용

  • participant 선수들에서 completion 선수들을 제거하고 남은 1명을 찾는 방법이다.
  • 'map'헤더 선언
  • <stirng, int> 형식의 map을 선언한다.
  • 먼저 participant를 돌면서 해당 key에 대한 value값을 1씩 증가시킨다. (동명이인 처리를 위해 이 방법을 썼다!)
  • completion을 돌면서 해당 key에 대한 value값을 1씩 감소시킨다.
  • 그럼 map에는 완주하지 못한 선수에 대한 value값만 1이고 나머지는 0이된다.
  • participant를 돌면서 0이 아닐때를 찾고 break한다. 그때의 auto i값이 완주하지 못한 선수의 이름이다.

  • map을 처음써봐서 어려웠다. map에는 auto를 자주 쓰는것 같으니 형식을 알아두어야 겠다.

🌱 코드 2

#include <string>
#include <vector>
#include <algorithm>
#include <map>

using namespace std;
map<string, int> m;

string solution(vector<string> participant, vector<string> completion) {
    string answer = "";
    for(auto i: participant){
        m[i]++;
    }
    
    for( auto i:completion){
        m[i]--;
    }
    
    for(auto i:participant){
        if(m[i]!=0){
            answer=i;
            break;
        }
    }
    
    return answer;
}
profile
공부한 내용 잊어버리지 않게 기록하는 공간!

0개의 댓글