99클럽 코테 스터디 2일차 TIL + 해시

🌎·2024년 5월 21일
0

TIL

목록 보기
2/3

문제

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

풀이

import java.util.HashMap;

class Solution {
    public String solution(String[] participant, String[] completion) {
        
        HashMap<String, Integer> map = new HashMap<>();
        
        for(String c : completion) {
            map.put(c, map.getOrDefault(c, 0) + 1);
        }
        
        for(String p : participant) {
            Integer count = map.getOrDefault(p, 0);

            if(count == 0) {
                return p;
            } else {
                map.put(p, count - 1);
            }
        }
        return "";
    }
}

Interface Map<K,V> - 내 기준 알아두면 좋을 것 같은 메소드

default V 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 값으로 매핑되는 Value 가 있으면, Value 를 리턴. 없으면 defaultValue 를 리턴.

default V putIfAbsent(K key, V value)

If the specified key is not already associated with a value (or is mapped to null) associates it with the given value and returns null, else returns the current value.

key 값으로 매핑되는 값이 없으면 value 를 넣고 null 을 리턴. 있으면 현재 value 를 리턴.

default V compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)

Attempts to compute a mapping for the specified key and its current mapped value (or null if there is no current mapping).

지정된 key와 매핑된 값을 계산해서 새로운 값을 넣어준다. (매핑된 것이 없을 경우엔 null)

Map<String, Integer> map = new HashMap<>();
map.compute("addOne", (key, oldValue) ->  oldValue == null ? 0 : oldValue + 1);
System.out.println(map.get("addOne")); // 0

map.compute("addOne", (key, oldValue) ->  oldValue == null ? 0 : oldValue + 1);
System.out.println(map.get("addOne")); // 1

default V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)

If the specified key is not already associated with a value (or is mapped to null), attempts to compute its value using the given mapping function and enters it into this map unless null.

지정된 key 가 value와 관계가 없으면(혹은 null이라면), function 으로 매핑한 값으로 계산을 하고 map에 넣음.

Map<String, Integer> map = new HashMap<>();
String value = map.computeIfAbsent("apple", key -> "red " + key);
System.out.println(value); // red apple

value = map.computeIfAbsent("apple", key -> "green " + key);
System.out.println(value); // red apple

default V computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)

If the value for the specified key is present and non-null, attempts to compute a new mapping given the key and its current mapped value.

지정된 key 의 value 가 존재하고 non-null 일 경우, 주어진 key 와 현재의 value로 새로운 매핑을 계산함.

Map<String, String> map = new HashMap<>();
map.put("Apple", "Red");


String str = map.computeIfPresent("Apple", (key, oldValue) -> key + oldValue + "Good");
System.out.println(str);	// AppleRedGood


String str_null = map.computeIfPresent("none", (key, oldValue) -> key + oldValue + "Hello");
System.out.println(str_null); 	// null
profile
영차영차

0개의 댓글