🔵 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/42576
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
🔵 알고리즘
- participant 벡터를 이용해 "사람 - 명" 정보를 담고 있는 map을 만들고 map[name] 값을 증가시킨다.
- completion 벡터를 순회하며 도착한 사람이면 map[name] 값을 감소시킨다.
- map을 순회하여 특정 이름을 가진 사람(남아 있는 사람)이 1명 이상이면 완주하지 못한 사람으로 간주하여 이름을 반환한다.
🔵 코드
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
string solution(vector<string> participant, vector<string> completion) {
string answer = "";
unordered_map<string, int> peopleByName;
// "사람 - 명" 의 표를 만든다.
for (string name : participant)
{
peopleByName[name]++;
}
// 도착자 수를 표에서 차감한다.
for (string name : completion)
{
peopleByName[name]--;
}
// 1명 이상 남아 있는 경우 완주하지 못한 선수이다.
for (string name : participant)
{
if (peopleByName[name] > 0)
answer = name;
}
return answer;
}
🔵 시간 복잡도
participant 길이를 N이라 했을 때 시간 복잡도는 O(N)이다.
'PS' 카테고리의 다른 글
| [C++] Programmers Lv. 2 "전화번호 목록" (1) | 2025.05.23 |
|---|---|
| [C++] Programmers Lv. 2 "영어 끝말잇기" (0) | 2025.05.22 |
| [C++] Programmers Lv. 1 "카드 뭉치" (0) | 2025.05.16 |
| [C++] Programmers Lv. 2 "기능 개발" (0) | 2025.05.16 |
| [C++] Programmers Lv. 3 "표 편집" (0) | 2025.05.15 |