본문 바로가기

알고리즘/Programmers

[Programmers] Level1. 완주하지 못한 선수 (Java)

문제설명 )

 

 

풀이 CODE )

더보기
import java.util.HashMap;

class Solution { //두 개의 문자열 배열을 비교하여 중복되지않는 1개의 문자열 리턴
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        //두개의 문자열 index 에 +1또는 -1을 해줄 Hash 선언
        HashMap<String, Integer> cnt = new HashMap<>();

        //participant 의 인덱스에 맞춰 +1
        for (String player : participant) {
            //getOrDefault 를 통하여 중복 검사
            cnt.put(player, cnt.getOrDefault(player, 0) + 1);
        }
        //completion 의 인덱스에 맞춰 -1
        for (String player : completion) {
            cnt.put(player, cnt.get(player) - 1);
        }
        //+1과 -1이 만나면 0 이된다. 그렇지 않은 인덱스에있는 값을 answer에 대입
        for (String ans : cnt.keySet()) {
            if (cnt.get(ans) != 0) {
                answer = ans;
            }
        }

        return answer;
    }
}

 

풀이법 ) 

 

1. 두 개의 문자열 배열을 비교하여 중복되지않는 1개의 문자열을 리턴하면 되는 문제이다.

2. Hash를 사용하는 문제이므로, 두개의 문자열 비교를 위한 HashMap 선언

3. HashMap에 각각 배열의 길이에 맞게 인덱스에 +1 -1을 해준다.

4. HashMap에 저장된 Value를 for문으로 확인하여 0이 아닌 곳의 값을 answer에 담아 Return;

 


2021.11.11 재풀이 코드

더보기
import java.util.*;

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])) {
                return participant[i];
            }
            
            // 완주자 인덱스만큼 체크했지만, 없으면 마지막 참가자 리턴
            if(i==completion.length-1) {
                answer = participant[i+1];
            }
        }
        
        return answer;
    }
}