Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

네박자대로

[프로그래머스 > 고득점kit 해시] 완주하지 못한 선수 (C++) 본문

알고리즘

[프로그래머스 > 고득점kit 해시] 완주하지 못한 선수 (C++)

ysyang 2021. 1. 21. 13:18

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

 

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

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

programmers.co.kr

 

 

항상 백준에서만 연습하다가 처음 프로그래머스 문제를 풀어봤는데 웹디자인도 보기 편하고 깔끔해서

자주 들를 것 같다!

 

 

 

고득점 kit를 먼저 하나씩 풀어보려고 한다. 우선 해시 kit의 첫 번째 문제, '완주하지 못한 선수'이다.

level 1 답게 금방 풀었다.

 

 

 

아이디어는 다음과 같이 생각했다.

 

 

 

participant vector와 completion vector에는 딱 한명 빼고 모두 동일한 사람들이 속해있다.

즉 완주하지 못한 participant vector 내의 단 한 사람만 골라내면 된다.

 

 

그럼 sort함수를 이용하여 두 벡터를 모두 정렬한 뒤

반복문으로 0번째 벡터 인덱스부터 마지막 벡터 인덱스까지 차례로 비교한 뒤 

두 값이 같지 않은 participant vector의 값을 리턴하면 끝이다.

 

 

단, 주의할 것은 participant가 completion보다 1명 더 많으므로

for문은 completion의 크기 만큼만 반복하고,

반복문 동안 서로 다른 멤버가 없다면

 

participant vector의 마지막 사람이 바로 완주하지 못한 사람이란 뜻이므로

participant vector의 마지막 벡터 값을 리턴하면 된다.

 

 

 

 

코드로 보면 다음과 같이 간단하게 표현할 수 있다.

 

 

 

 

 

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

using namespace std;

string solution(vector<string> participant, vector<string> completion) {
    string answer = "";
    bool flag = false;
    
    sort(participant.begin(),participant.end());
    sort(completion.begin(),completion.end());
    
    int p_size=participant.size();
    int c_size=p_size-1;
    
    for(int i=0; i<c_size; i++)
    {
        if(participant[i]!=completion[i])
        {
            answer = participant[i];
            flag = true;
            break;
        }
    }
    
    if(flag==false)
    {
        answer = participant[p_size-1];
    }
    

    return answer;
}

 

 

 

 

 

 

채점 결과

 

 

무사히 맞췄다!

Comments