Algorithm/Programmers

완주하지 못한 사람 : Java

say! 2025. 7. 5. 06:16
728x90

동명이인 여부 O > 해시맵으로 이름별 사람 수 카운트하

  • HashMap<String, Integer>를 사용해서 이름별 등장 횟수를 저장.
  • participant에서 이름을 모두 +1 하고,
    completion에서 이름을 -1함.
  • 마지막에 value가 1로 남은 사람이 완주 못한 사람

*동명이인 조건때문에 이분 탐색은 적절치 X

import java.util.*;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = ""; // 완주하지 못한 선수의 이름
        HashMap<String, Integer> h = new HashMap<>();
        
        for(String name : participant){
            h.put(name, h.getOrDefault(name, 0)+1);
        }
        
        for(String name : completion){
            h.put(name, h.getOrDefault(name, 0)-1);
        }
        
        for(String name : participant){
            if(h.get(name)!=0)
                answer = name;
        }
        
        return answer;
    }
}

 

import java.util.*;

class Solution {
    // 완주하지 못한 선수 이름 리턴
    public String solution(String[] participant, String[] completion) {
    Map<String, Integer> cnt = new HashMap<>();   
    
        //참가자 수 세기
        for(String p: participant){
            cnt.put(p, cnt.getOrDefault(p, 0) + 1);
        }
        
        // 완주자 수 빼주기
        for(String c: completion){
            cnt.put(c, cnt.get(c) - 1);
            // 0이면 완주한거임
            if(cnt.get(c) == 0){
                cnt.remove(c);
            }
        }
         
        return cnt.keySet().iterator().next();
    }
}

 

정렬 버전

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];
    }
}

'Algorithm > Programmers' 카테고리의 다른 글

조이스틱 : Java  (1) 2025.07.05
[Lv.2] 기능개발 : Java  (3) 2025.07.05
[Lv.2] 소수찾기 : Java  (0) 2025.07.05
[Lv.2] 피로도 : Java / DFS+백트래킹  (0) 2025.07.05
[Lv.3] 이중우선순위큐  (0) 2025.07.04