문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/42576
Note
해시를 잘 활용하고자 여러 문제들을 풀어보고 있습니다. 익숙해지면 유용하게 활용할 수 있을 것 같아요.
이번 문제 푸는 로직은 간단했습니다.
참가자에서 이름이 나오면 +1, 완주자에서 나오면 -1. 동명이인도 별도 체크가 필요없는 방법입니다.
getOrDefault()
메서드는 해쉬맵 문제에서는 내내 유용하게 쓰고 있습니다.
for-each를 공부하고도 잘 안 써서 쓸 때마다 낯선데, 자주 써서 익히려고 합니다.
Key
1. key=이름, value=참가(+1)/완주(-1)
2. getOrDefault(Object key, V defaultValue)
Returns the value to which the specified key is mapped, or defaultValue if this map contains no mapping for the key.
key가 있다면 key의 value를 가져오고 맵핑된 key가 없다면 defaultValue를 가져온다.
https://docs.oracle.com/javase/8/docs/api/java/util/Map.html
3. keySet()
map에 있는 모든 key를 set에 담아 리턴한다. set에 담았기 때문에 순서가 없다. (keySet()[0] 불가능...)
4. for-each 문
keySet을 순회하면서 해당 key의 value가 0인지 비교하는데에 활용했습니다.
제출한 코드
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
//참가자 이름을 key로 map에 추가하면서 등장하면 value +1
//완주자 이름을 key로 추가하면서 value -1
//마지막에 value가 0이 아닌 key를 리턴
Map<String, Integer> marathon = new HashMap<>();
for(int i = 0 ; i < participant.length ; i++){
marathon.put(participant[i], marathon.getOrDefault(participant[i], 0) + 1);
}
for(int i = 0 ; i < completion.length ; i++){
marathon.put(completion[i], marathon.get(completion[i]) -1);
}
for (String key : marathon.keySet()) {
if(marathon.get(key) != 0) {
answer = key;
break;
}
}
return answer;
}
}
반응형
'코딩테스트 > Java' 카테고리의 다른 글
프로그래머스/자바 lv2 전화번호 목록 - 해시, containsKey, substring() (0) | 2024.03.31 |
---|---|
프로그래머스/자바 lv.1 가장 가까운 같은 글자 - HashMap, 문자열을 배열로 변환하기 (0) | 2024.03.30 |
프로그래머스/자바 A로 B 만들기 - HashMap (0) | 2024.03.29 |