Language/JAVA

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

paran21 2022. 1. 17. 18:58

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

진짜 고민 많이한 문제인데, 결국 풀지는 못했다.

처음에는 Stream의 anyMatch로 했는데, 동명이인 문제를 해결하지 못했다.

그다음에 찾은게 List로 변환하여 removeAll하는 방식이었는데, 이역시 동명이인 문제를 해결하지 못했고, 변환을 꼭 해야한다는 문제가 있었다.

그 다음으로 생각한게 오름차순으로 동일하게 배열해주는 방식이었다.

import java.util.Arrays;


class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        Arrays.sort(participant);
        Arrays.sort(completion);
        for (int i = 0; i < participant.length-1; i++) {
            if(!participant[i].equals(completion[i])) {
                answer = participant[i];
            }
        }
        //위에서 찾지 못했다면, participant의 가장 마지막 값일 것
        if (answer.length() == 0) answer = participant[participant.length-1];
        return answer;
    }
}

이 방식으로 코드실행>테스트는 통과했는데, 제출 후 채점하기에서 대부분 틀려서 해결하지 못했다.

다른 정답코드를 보고 일부 수정을 했다.

마지막 if에서 answer.length() == 0 이부분 가정이 틀린 것 같은데 다른 방법을 찾지 못했다.

문제 원인 찾았다...! →

 

import java.util.Arrays;


class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        Arrays.sort(participant);
        Arrays.sort(completion);
        for (int i = 0; i < completion.length; i++) {
            if (!participant[i].equals(completion[i])) {
                answer = participant[i];
                return answer;
            }
        }
        //위에서 찾지 못했다면, participant의 가장 마지막 값일 것
        return participant[participant.length-1];
    }
}

 

타입에 따라 사용하는 메소드가 너무 달라서 햇갈리는 부분이 많다.

이 문제는 해시 문제로 분류되어, 해시도 추가로 공부해야할 것 같다.

 

다른사람 답안 : HashMap

import java.util.HashMap;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        HashMap<String, Integer> hm = new HashMap<>();
        for (String player : participant) hm.put(player, hm.getOrDefault(player, 0) + 1);
        for (String player : completion) hm.put(player, hm.get(player) - 1);

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