문제 풀이/프로그래머스

[프로그래머스] 완주하지 못한 선수(JAVA)

27200 2024. 4. 23. 15:34

https://school.programmers.co.kr/learn/courses/30/lessons/42576



풀이

import java.io.*;
import java.util.*;

class Solution {
    public static String solution(String[] participant, String[] completion) {
        String answer = "";
        HashMap<String, Integer> check = new HashMap<>();

        for(String x : participant){
            if(check.containsKey(x)){
                check.put(x, check.get(x) + 1);
            }else{
                check.put(x, 1);
            }
        }

        for (String x : completion){
            if(check.containsKey(x)){
                check.put(x, check.get(x) - 1);
            }
        }

        for(Map.Entry<String, Integer> entry : check.entrySet()){
            if(entry.getValue() != 0){
                answer = entry.getKey();
                break;
            }
        }

        return answer;
    }
}

 

마라톤 참여자에 대해 먼저 키밸류를 넣어준다. 이름이 중복될 수 있기 때문에 값이 이미 있다면 +1을, 아니라면 1을 초기값으로 설정해 준다.

 

이후 완주자들에 대해 벨류를 0씩 낮춰주는 작업을 한다. 문제 조건에서 조금 친절하게 참여하지 않은 사람이 완주 목록에 있을 수는 없기 때문에 containsKey를 할 필요는 없겠지만 그래도 검사를 진행해 주었다.

 

마지막으로 값이 0이 아닌 것을 찾게 된다면 반환하게 된다. 여기서 바로 break를 쓴 것은 문제 조건에 한 명만 완주를 하지 못했다고 했기 때문이다.

 

역시 문제 조건을 항상 꼼꼼하게 체크하자!!