[Programmers] 42576번 - 완주하지 못한 선수 [Java][C++]
[Programmers] 42576번 - 완주하지 못한 선수 [Java][C++]
1. 문제 풀이
participant에서 completion를 뺀 한 명의 선수를 찾는 문제로 해시맵을 활용하면 해결할 수 있다. 이름이 중복인 선수가 없다면 해시셋을 사용하면 되지만 이름이 중복될 수 있기에 key에 선수 이름, value에 해당 선수의 수를 저장한 해시맵으로 참여한 선수 정보를 먼저 저장 후 완주한 선수 정보를 갱신해줬다. 이러면 해시맵에는 value가 1인 선수 한 명이 유일하게 존재하게 된다.
2. 코드
1. 풀이 [Java]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
Map<String, Integer> map = new HashMap<>();
for (String p : participant) {
map.put(p, map.getOrDefault(p, 0) + 1);
}
for (String c : completion) {
map.put(c, map.get(c) - 1);
}
for (Map.Entry<String, Integer> e : map.entrySet()) {
if (e.getValue() == 1) {
return e.getKey();
}
}
return "";
}
}
2. 풀이 [C++]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <string>
#include <unordered_map>
#include <vector>
using namespace std;
string solution(vector<string> participant, vector<string> completion) {
unordered_map<string, int> mp;
for (string& s : participant) mp[s]++;
for (string& c : completion) mp[c]--;
for (auto& [k, v] : mp) {
if (v == 1) return k;
}
return "";
}
This post is licensed under CC BY 4.0 by the author.