https://school.programmers.co.kr/learn/courses/30/lessons/42576?language=java

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

접근

  이전에 Python으로 문제를 풀었을 때는 hash함수로 hash값을 생성해서 각각의 String값을 비교했다. 하지만 Python과 달리 Java에서는 hashCode() 함수로 각 String 값에 대해 해쉬값을 생성했을 때 동일한 값이 리턴되었다. (String 값이 동일하다면 "participant".hashCode()나 new String("participant").hashCode()나 동일한 정수값이 생성되는 문제가 있었다.) 

  구글링 결과 , HashMap의 key를 participant 이름(String)으로, value를 등장한 횟수(Integer)로 정의하면 쉽게 해결할 수 있었다. 이러한 HashMap을 사용하여 key가 participant 배열에서 등장할 때마다 1을 더해주고, completion 배열에서 나타날 때마다 1씩 빼주었을 때, 마지막에 value가 1인 key값을 정답으로 출력해주면 되었다.

 

코드
import java.util.*;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        
        HashMap<String, Integer> map = new HashMap<>();
        
        for (String p : participant) {
            if (map.containsKey(p)) {
                map.put(p, map.get(p) + 1);
            } else {
                map.put(p, 1);
            }
        }
        
        for (String c : completion) {
            if(map.containsKey(c)) {
                map.put(c, map.get(c) - 1);
            }
        }
        
        for (String key : map.keySet()) {
            int value = map.get(key);
            if (value == 1) {
                answer = key;
            }
        }

        return answer;
    }
}

 

정리
  • containsKey(Object key)  : Map에 key값이 존재하면 true 리턴, key 값이 존재하지 않으면 false 리턴.
  • keySet() : Map에 존재하는 key의 값들을 리턴. 주로 Map을 순회할 때 사용. 
참고

+ Recent posts