코테 준비

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

우디혜 2020. 10. 13. 20:49

정말 간단한 문제지만 java로 오랜만에 풀어보는 문제라 간단한 걸로 준비했다

 

로직

hashMap을 만들고

participant와 compeltion을 동일한 hashmap에 넣어 카운트 해준다

중복되지 않은 값은 무조건 홀수이므로, hashmap 전체를 순회하여 % 2 == 1인 값을 return해준다.

 

 

코드

import java.util.*;

class Solution {
    public String solution(String[] participant, String[] completion) {
        Map<String, Integer> hashMap = new HashMap<String, Integer>();

        putElements(hashMap, participant);
        putElements(hashMap, completion);

        return nonCompletion(hashMap);
    }

    void putElements(Map<String, Integer> hashMap, String[] people){
        for(String name : people){
            int defaultValue = 1;
            if(hashMap.containsKey(name)){
                defaultValue += hashMap.get(name);
            }    
            hashMap.put(name, defaultValue);
        }
    }

    String nonCompletion(Map<String, Integer> hashMap){
        for(String name : hashMap.keySet()){
            if(hashMap.get(name) % 2 == 1) return name;
        }
        return "";
    }
}

 

코드리뷰

 

1. 오랜만에 하는거라 util을 *로 했는데 hashMap만 import 해줘도 괜찮을 것같다

2. HashMap에 getOrDefault라는 코드가 있더라

for(String name : participant) hashMap.put(name, hashMap.getOrDefault(name, 0) + 1);

이렇게 더 깔끔한 코드가 가능해진다.