프로그래머스의 완주하지 못한 선수(Lv1) 문제이다.
[ 문제풀이 ]
마라톤에 참가하는 선수 이름 리스트와, 완주한 선수 이름 리스트가 주어졌을 때, 완주하지 못한 1명의 선수를 찾아야 하는 문제이다.
문자열로 주어지는 선수들의 이름과 해당 이름을 가진 선수가 몇 명있는지를 (동명이인이 존재하므로) 관리해 주기 위해서 자료구조 map을 사용해주었다.
map<string , int> 형식으로, key값을 string형태로, value 값을 int형으로 선언해 주었다.
key값으로는 선수들의 이름이 들어가고, value값으로는 해당 이름을 가진 선수의 수가 들어가도록 설정해 주었다.
여기서 중요한 것은 ! 이 map에 저장하는 데이터는 "완주한 선수의 리스트" 라는 것이다.
이 부분을 코드로 확인한 후에 조금 더 구체적인 이야기를 해보자.
map<string, int> MAP;
void Make_Map(vector<string> completion)
{
for(int i = 0 ; i < completion.size(); i++)
{
string Str = completion[i];
MAP[Str]++;
}
}
위와 같이, 구현해 주었다.
예시를 한번 들어보자.
참가자 : [ A , B , A , C , D ] , 완주자 : [ A , D , A , B ] 가 있다고 가정해보자.
이 때, 완주자들을 map저장을 하게 되면 다음과 같아질 것이다.
MAP[A] = 2 , MAP[B] = 1 , MAP[D] = 1 이 될 것이다.
즉, 완주하지 못한 'C'선수 만이, MAP[C]의 값이 '0'이라는 것을 알 수 있다.
위와 같이 저장을 했다면, 해당 이름을 가진 선수의 수를 한명씩 감소 시키면서 완주하지 못한 선수를 찾으면 된다.
만약, 감소시키기 전에 이미 '0'의 값을 가진 선수라면, 이 선수가 완주를 하지 못한 것이라 판단할 수 있다.
이 부분을 코드로 나타내면 다음과 같다.
string Find_Answer(vector<string> V)
{
for(int i = 0 ; i < V.size(); i++)
{
string Str = V[i];
if(MAP[Str] == 0) return Str;
MAP[Str]--;
}
}
[ 소스코드 ]
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
32
33
|
#include <string>
#include <vector>
#include <map>
using namespace std;
map<string, int> MAP;
void Make_Map(vector<string> completion)
{
for(int i = 0 ; i < completion.size(); i++)
{
string Str = completion[i];
MAP[Str]++;
}
}
string Find_Answer(vector<string> V)
{
for(int i = 0 ; i < V.size(); i++)
{
string Str = V[i];
if(MAP[Str] == 0) return Str;
MAP[Str]--;
}
}
string solution(vector<string> participant, vector<string> completion)
{
string answer = "";
Make_Map(completion);
answer = Find_Answer(participant);
return answer;
}
|
cs |
'[ Programmers Code ] > # PG - Level1' 카테고리의 다른 글
[ 프로그래머스 신고 결과 받기 (Lv1] (C++) (2) | 2022.03.05 |
---|---|
[ 프로그래머스 상호평가 (Lv1) ] (C++) (0) | 2021.09.02 |
[ 프로그래머스 부족한 금액 계산하기 (Lv1) ] (C++) (2) | 2021.08.10 |
[ 프로그래머스 숫자 문자열과 영단어 (Lv1) ] (C++) (2) | 2021.07.12 |
[ 프로그래머스 로또의 최고 순위와 최저 순위 (Lv1) ] (C++) (0) | 2021.06.21 |