getOrDefault( Object key,V defaultValue )
- Java 8에서 추가된 Collection API 함수들 중 일부이다.
찾는 key가 존재한다면 찾는 key의 value를 반환하고, 없거나 null이면 default 값을 반환한다.
약간 SQL로 치면 NVL같이 null일경우 대체값으로 치환 뭐 이런느낌이랄까?
대신 이건 containsKey함수기능까지 내포하고있으므로 훨씬효율적이다!!!
ex)
String[] abc = { "a", "b", "c" };
HashMap<String,Integer> map = new HashMap<>();
for(String key : abc) {
map.put(key, map.getOrDefault(key,0) +1);
}
https://programmers.co.kr/learn/courses/30/lessons/42576
코딩테스트 연습 - 완주하지 못한 선수
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수
programmers.co.kr
프로그래머스의 해쉬관련 문제 중 완주하지 못한 선수라는 문제를 풀었는데
진짜 답안 하나도 안보고 풀고나서(성공!) 다른분들의 풀이를 봤더니
내가 하드코딩했던 로직이 이미 java8에서 함수로 구현되어있다는 것을 보고 머리를 쿵 얻어맞은듯!했다.
역시 공부를 해야해...ㅋㅋㅋ
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
HashMap<String,Integer> p_map = new HashMap<String,Integer>();//참가자목록
int baseCnt = 1;
String answer = "";
for(String el : participant){
if(p_map.containsKey(el)){
int newCnt = p_map.get(el) +1;
p_map.put(el,newCnt); //기존에 존재하는키면 갯수 늘려줌 동명이인
}else{
p_map.put(el,baseCnt); //동명이인아님
}
}
for(String com_name: completion){
if(p_map.containsKey(com_name) ){ //참가자수 1 다운시켜주기
int currentCnt = p_map.get(com_name);
p_map.put(com_name,currentCnt -1);
}
}
Set<String> keys = p_map.keySet();
for (String key : keys) {
if(p_map.get(key) >0){
answer= key;
}
}
return answer;
}
}
내 코드를 보면 기본적으로 이름당 value를 디폴트 1로 부여해주고 동명이인일경우 현재값의 +1값으로 증가시켜주는 로직이있다.
if(p_map.containsKey(el)){
int newCnt = p_map.get(el) +1;
p_map.put(el,newCnt); //기존에 존재하는키면 갯수 늘려줌 동명이인
}else{
p_map.put(el,baseCnt); //동명이인아님
}
내가 만약 getOrDefault 함수를 알아서 이걸 활용했다면 정말간단하게
p_map.put( el, p_map.getOrDefault(el,0) +1 );
이 한 줄이면 됐을 것이다.
초깔끔....
역시...
게으른 개발자들이 세상을 바꾼다!!!!!!!!

'퇴근후공부 > 코딩테스트공부' 카테고리의 다른 글
[프로그래머스] 신규 아이디 추천 - 2021 KAKAO BLIND RECRUITMENT (0) | 2022.03.30 |
---|