본문 바로가기
코딩테스트/문제풀이

프로그래머스 > 해시 > 완주하지 못한 선수

by 바보3 2021. 8. 27.
import java.util.HashMap;

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

    }
}

participant : 참가한 선수가 담긴 배열

completion : 완주자가 담긴 배열

 

참가한 선수와 완주자 목록 모두 map에 담아주는데 선수이름을 key값으로, value값은 같은 이름 개수를

count 해줌.

 

map.getOrDefault(key, 0) + 1 의 의미는 map에서 key값을 검색해서 만약 해당하는 key값이 있을 경우

value값을 + 1씩 증가시키고, 해당하는 key값이 없는 경우는 0을 넣게된다.

 

예를들어 참가자가 : {A, A, B}, 완주자 : {A, B} 인 경우 map = {A = 3, B = 2}가 된다.

여기서 참가자 : 완주자의 이름이 1:1로 매칭되는 경우 완주를 한 사람이라고 볼 수 있다. (아래 그림 참조)

바꿔말하면 map의 value값이 짝수인 경우이다. (완주자의 수가 참가자보다 무조건 한명 적다는 조건 때문에 가능)

참가자 : 완주자가 1:1로 매칭되는 경우

참가자와 완주자가 1:1로 매칭되지 못하는 경우를 찾으면 되는데,

map의 value값이 홀수가 되는 경우를 찾으면 된다.

 

'코딩테스트 > 문제풀이' 카테고리의 다른 글

숫자 천단위 마다 콤마 붙이기  (0) 2021.08.23

댓글