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

gonudayo·2021년 8월 11일
0
post-thumbnail

프로그래머스 완주하지 못한 선수 를 풀기 위해 해시라는 것을 처음 사용해봤다.

풀이

  1. 참가자를 해시맵에 넣는다.
    1-1. 이때, 중복값을 고려한다.
  2. 해시맵에 있는 값이 완주자 명단에 있으면 뺀다.
  3. 남아 있는 이름을 리턴한다.

전체코드

import java.util.HashMap;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        
        HashMap<String, Integer> HM = new HashMap<>();
        
        for (String name : participant) HM.put(name, HM.getOrDefault(name, 0) + 1);
        
        for (String name : completion) HM.put(name, HM.get(name) - 1);
        
        for (String key : HM.keySet()) {
            if (HM.get(key) != 0) {
                answer = key; 
                break; 
            } 
        } 
        
        return answer;
    }
}

선언

import java.util.HashMap;

class Main {
    public static void main(String[] args) {
    	HashMap<String, Integer> HM = new HashMap<>();
    }
}

참가자 이름 넣기

for (String name : participant) HM.put(name, HM.getOrDefault(name, 0) + 1);
  • getOrDefault(name, 0) + 1
    HM에 동일한 key 값이 존재할경우 반환하여 value 값에 +1 를 한다.
    동명이인이 있을 경우 value 값이 2 이다.
    [key : "이름", value : 2] 형태가 된다.

  • 아닐 경우 0을 반환하여 value 값이 1 이다.
    [key : "이름", value : 1]

완주자 제외하기

for (String name : completion) HM.put(name, HM.get(name) - 1);
  • 완주자 이름과 일치할 경우 value 값에 -1를 한다.
    [key : "이름", value : 0] 형태가 된다.
    (동명이인 중 한명만 완주했을 경우 value 값이 2 - 1 이기에 1 이 남는다.)

완주하지 못한 선수 찾기

for (String key : HM.keySet()) {
	if (HM.get(key) != 0) {
    	answer = key;
        break;
	} 
} 
  • 0 (완주한 경우) 가 아니라면 해당 이름 리턴.
profile
초신성 백엔드 개발자

0개의 댓글