Post

[Programmers] 42576번 - 완주하지 못한 선수 [Java][C++]

[Programmers] 42576번 - 완주하지 못한 선수 [Java][C++]

문제 링크


1. 문제 풀이


participant에서 completion를 뺀 한 명의 선수를 찾는 문제로 해시맵을 활용하면 해결할 수 있다. 이름이 중복인 선수가 없다면 해시셋을 사용하면 되지만 이름이 중복될 수 있기에 key에 선수 이름, value에 해당 선수의 수를 저장한 해시맵으로 참여한 선수 정보를 먼저 저장 후 완주한 선수 정보를 갱신해줬다. 이러면 해시맵에는 value1인 선수 한 명이 유일하게 존재하게 된다.


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.