카테고리 없음

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

느리지만 꾸준하게 2024. 5. 23. 18:36
  • 오늘의 학습 키워드 : map
  • Map의 특징
  • Map은 선언 시 <key, value>로 값을 넣음
  • Key와 Value는 한 쌍으로 Key로 식별, Value에 사용할 값을 넣는 식
  • Key는 중복 불가, 동일한 Key 값을 넎으면 최근에 넣은 값이 적용

 

 

Map의 주요 메소드


Map 안에 값 넣기 Map.put(key, value);
Map 안의 값 가져오기 Map.get(key);
Map 크기 확인
Map.size();




Map 안의 내용 변경
Map.replace(key, value);
Map 안에 특정 Key, Value 들었는지 확인
Map.containsKey(key);
Map.containsValue(value);


Map의 크기가 0인지 확인
Map.isEmpty();


Map 안의 내용 삭제
Map.remove(key);


Key가 있으면 Value 없으면 default 호출
Map.getOrDefault(key, default);
- Map에 key에 해당하는 값이 없을 경우 default 호출


Key가 없거나 Value가 null일때만 삽입
Map.putIfAbsent(key, value);


Map은 선언 시
HashMap, TreeMap, HashTable, LinkedHashMap으로 선언 가능


HashMap
- Map 안에서 key/value에 따른 순서 없음

TreeMap
- key 값에 따라 오름차순 정렬,
정렬 때문에 대량의 데이터 삽입/삭제시 오래 걸림


LinkedHashMap
- 삽입 순서에 따라 정렬

HashTable
- key/value에 null을 넣을 수 없음,
동기화(synchronized) 되어있음

 

 

 

 

오늘의 문제

LeetCode - Valid Parentheses

 

  • Sol1
class Solution {
    public boolean isValid(String s) {
        Map<Character, Character> map = Map.of(')', '(', '}', '{', ']', '[');
        Stack<Character> stack = new Stack<>();

        for (Character c : s.toCharArray()) {
            if (c == '(' || c == '{' || c == '[') {
                stack.push(c);
            } else if (stack.isEmpty() || stack.pop() != map.get(c)) {
                return false;
            }
        }

        return stack.isEmpty();
    }
}
  • 여는 괄호가 나오면 닫는 괄호가 반드시 나오고 (는 )와 {는 }와 [는 ]와 매칭이 되어야 한다.
  • 스택 이용하여 여는 괄호가 나오면 그대로 Stack에 넣어주고, 닫는 괄호가 나오면 Stack.peek()값과 비교하여 쌍이 제대로 맞는지 확인
  • 단순하게 switch문이나 if-else문으로 짤수도 있고 HashMap을 사용하여 반복되는 로직 줄일 수도 있다.
  • key = 닫는 괄호, value 여는 괄호로 저장해두고 닫는 괄호가 주어지면 stack의 가장 최근 값이 여는 괄호와 일치하는지 비교

 

  • Sol2
import java.util.*;

class Solution {
    public boolean isValid(String s) {
        Stack<Character> st = new Stack<>();

        for (int i = 0 ; i < s.length(); i++) {
            char c = s.charAt(i);
            char item;

            if (c == '(' || c == '{' || c == '[') st.push(c);

            else {
                try {
                    item = st.pop();
                } catch (EmptyStackException e) {
                    return false;
                }
                if ((c == ')' && item != '(') || (c == '}' && item != '{') || (c == ']' && item != '[')) {
                    return false;
                }
            }
        }

        return st.isEmpty();
    }
}