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

지수·2021년 9월 1일
0
post-thumbnail

알고리즘 문제 풀이를 블로그에 올리는 이유는 풀이, 코드를 기록하기 위함이니
앞으로 문제를 다 긁어오기보다 링크만 두고 풀이가 잘 보이도록 포스팅 할 예정입니다!

📄 문제

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


👩‍💻 풀이

1. 문제 이해

이 문제는 참가자(participant) 이름이 담긴 배열과, 완주자(completion) 이름이 담긴 배열을 비교하여
참가자 중 완주하지 못한 선수 이름을 찾아내는 문제이다.
(제한사항 : completion의 길이는 participant의 길이보다 1 작습니다.)

2. HashMap 활용 풀이

import java.util.HashMap;

public class Solution {
    static String solution(String[] participant, String[] completion) {
        String answer ="";

        HashMap<String, Integer> map = new HashMap<>();

        for(String player : participant) {
            map.put(player, map.getOrDefault(player, 0) + 1);
        }
        for(String player : completion) {
            map.put(player, map.get(player) - 1);
        }

        for(String key : map.keySet()) {
            if(map.get(key) != 0) {
                answer = key;
            }
        }

        return answer;
    }
}

3. Sort 활용 풀이

  • 진행중인 자바 코테 스터디 팀원분께서
    위의 제한사항(completion의 길이는 participant의 길이보다 1 작습니다.)에 초점을 맞추어 Sort를 활용한 풀이는 보여주셨다.
  • completion의 길이는 participant의 길이보다 1 작습니다. = 완주하지 못한 사람은 늘 1명 뿐이다.
import java.util.*;
class Solution {
    public String solution(String[] participant, String[] completion) {
        Arrays.sort(participant);
        Arrays.sort(completion);
        
        for(int i=0;i<completion.length;i++){
            if(!participant[i].equals(completion[i])){
                return participant[i];
            }
        }
        return participant[participant.length-1];
    }
}

평소 코테 문제를 풀 때 제한사항 부분을 자세히 보지 않아서
종종 메모리 초과 같은 에러를 만나기도 했는데..앞으로는 그런 이유가 아니라도 제한사항을 꼼꼼히 봐보아야겠다.
문제에 새로운 방식으로 접근할 수 있는 좋은 방법인 것 같다.


위 풀이의 경우 반복문에 앞서 정렬 과정을 갖기 때문에 속도는 비교적 느리다.
주어지는 데이터 수가 많이지면 많아질수록 속도가 더 느려지겠지만ㅜ

새로운 접근방식이 신기했다!
정렬을 이용한 풀이를 다음에 꼭 써보아야겠다!

profile
사부작 사부작

0개의 댓글