항해 플러스

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

느리지만 꾸준하게 2024. 5. 21. 21:27
  • 오늘의 학습 키워드 : HashMap

1. HashMap : 데이터 저장할 때 key와 value가 짝을 이루어 저장, 데이터를 저장할 때 Key값으로 해시함수 실행한 결과를 통해 저장위치 결정.

2. HashMap은 특정 데이터의 저장위치를 해시함수를 통해서 바로 알 수 있고 데이터 추가, 삭제, 검색이 빠름

3. HashMap은 Key 값을 통해서만 검색이 가능, HashMap의 Key값은 중복될 수 없고, Value 값은 Key 값이 다르다면 중복이 가능.

 

 

HashMap 메서드

데이터 저장

1. V put(K key, V value) : key와 value를 저장.
2. void putAll(Map<? extends K ? extends V> m) : Map m의 데이터를 전부 저장
3. V putIfAbsent(K key, V value) : 기존 데이터에 key가 없으면 key와 value를 저장.



데이터 삭제

1. void clear() : 모든 데이터를 삭제
2. V remove(Object key) : key와 일치하는 기존 데이터(key와 value)를 삭제
3. boolean remove(Object key, Object value) : key와 value가 동시에 일치하는 데이터를 삭제



데이터 수정
1. V replace(K key, V value) : key와 일치하는 기존 데이터의 value를 변경.
2. V replace(K key, V oldValue, V newValue) : key와 oldValue가 동시에 일치하는 데이터의 value를 newValue로 변경


데이터 변환
1. V get(Object key) : key와 맵핑된 value값을 반환
2. V getOrDefault(Object key, V defaultValue) : key와 맵핑된 value값을 반환하고 없으면 defaultValue값을 반환합니다.
3. Set<Map.Entry<K, V>> entrySet( ) : 모든 key-value 맵핑 데이터를 가진 Set 데이터를 반환합니다. 
4. Set<K> keySet( ) : 모든 key 값을 가진 Set 데이터를 반환합니다. 
5. Collectio <V> values() : 모든 value값을 가진 Collection 데이터를 반환

 

 

 

프로그래머스 - 완주하지 못한 선수

  • 해시를 이용한 문제풀이
  1. key는 완주한 선수의 이름을 value는 해당 선수의 이름을 카운트하는 Hash를 생성한다.
  2. 참가자와 완주한 선수의 Hash를 통해 완주하지 못한 1명을 찾는다.
import java.util.*;
class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        HashMap<String, Integer> hm = new HashMap<>();

        for (String p : participant) {
            hm.put(p, hm.getOrDefault(p, 0) + 1);
        }

        for (String c : completion) {
            hm.put(c, hm.get(c) - 1);
        }

        for (String key : hm.keySet()) {
            if (hm.get(key) != 0){
                answer = key;
            }
        }

        return answer;
    }
}

 

 

 

  • 배열을 이용한 문제풀이
  • 하나의 루프를 돌면서 Completion 배열을 기준으로 잡고 처음부터 끝까지 돌면서 비교
  • 양쪽 배열을 다 정렬해서 같은 index의 값이 다르다면, Participant[index] 값이 정답.
import java.util.*;

class Solution {
    public String solution(String[] participant, String[] completion) {
        Arrays.sort(participant);
        Arrays.sort(completion);
        
        int i;
        for (i = 0; i < completion.length; i++) {
            
            if (!participant[i].equals(completion[i])){
                return participant[i];
            }
        }
        
        return participant[i];
    }
}