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을 순회할 때 사용.
참고