본문 바로가기
Algorithm/프로그래머스 코딩테스트 문제풀이전략

[프로그래머스] Lv.1 완주하지 못한 선수

by 미네구스 2024. 5. 6.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 접근 방법

1. 참가자들의 이름과 등장횟수를 해쉬맵에 담아준다.

2. 완주자들을 순회하며 해쉬맵에서 등장횟수 - 1을 해준다.

3. 마지막으로 해쉬맵의 value값을 순회할 때 0이 아닌 값이 있다면, 해당 Key를 리턴해준다.

import java.util.*;
class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        
        Map<String, Integer> map = new HashMap<>();
        for(String p : participant) {
            map.put(p, map.getOrDefault(p, 0) + 1);
        }
        
        for(String c : completion) {
            if (map.containsKey(c)) {
                map.put(c, map.get(c) - 1);
            }
        }
        
        for(String key : map.keySet()) {
            if (map.get(key) != 0) {
                return key;
            }
        }
        return answer;
    }
}

 

 

문제 풀이 회고

 

처음에 잘못된 방향으로 생각하다보니 시간 소모를 많이 했다. 처음 로직은 일단 각 배열들을 sorting하고, String.join을 이용해서 String 형태로 각 배열의 차이점을 볼 수 있게 해줬다.

 

그리고, 완주자 배열을 순회하면서 참가자와 이름이 다르다면, 동명 이인이라는 것 이므로 그 이름을 리턴하도록 해주었다. 그 이외의 경우에는 동명이인이 없으므로 참가자의 마지막 선수를 리턴하도록 해줬다.

 

문제에서 주어진 예제는 통과했지만, 제출하니 전부 틀려서 고민하다가 갑자기 등장횟수를 저장하는 방향이 떠올라서 쉽게 풀었던 문제였다.