Backend
home
✏️

Day2 (3/6) - 올바른 괄호

생성 일시
2026/03/05 10:23
알고리즘/자료구조 유형
Stack
HashMap

문제

두 수의 합이 target이 되는 인덱스 찾기

내가 작성한 답안

// Day2: 두 수의 합이 target이 되는 인덱스 찾기 // 2026-03-06 (목) // 시간복잡도: O(n); import java.util.*; public class ValidParenthesesEx { public static void main(String[] args) { String s = "()[]{}"; System.out.println(isValid(s)); } private static boolean isValid(String s) { Stack<Character> stack = new Stack<>(); int len = s.length(); for (int i = 0; i < len; i++) { char c = s.charAt(i); if (!stack.isEmpty() && c == ')' && stack.peek() == '(') { stack.pop(); } else if (!stack.isEmpty() && c == ']' && stack.peek() == '[') { stack.pop(); } else if (!stack.isEmpty() && c == '}' && stack.peek() == '{') { stack.pop(); } else { stack.push(c); } } return stack.isEmpty(); } }
Java
복사

다른 풀이방법

/** * Map을 활용하여 작성 */ import java.util.*; public class ValidParenthesesEx2 { public static void main(String[] args) { String s = "()[]{}"; System.out.println(isValid(s)); } private static boolean isValid(String s) { Map<Character, Character> map = new HashMap<>(); map.put(')', '('); map.put(']', '['); map.put('}', '{'); Stack<Character> stack = new Stack<>(); for (char c : s.toCharArray()) { if (map.containsKey(c)) { if (stack.isEmpty() || stack.pop() != map.get(c)) { return false; } } else { stack.push(c); } } return stack.isEmpty(); } }
Java
복사

오늘의 진행내용 정리

[Day 2] <문제> 문자열에 괄호가 올바르게 짝지어져 있는지 확인하세요. <조건> 열린 괄호는 같은 종류의 닫힌 괄호로 닫혀야 한다. 순서가 올바르게 닫혀야 한다. 사용 알고리즘 Stack, HashMap 시간복잡도 O(n) 배운 점 올바른 괄호 문제를 단순히 Stack외에도 Map을 활용하면 효율적인 알고리즘 구현이 가능하다는 걸 알게 되었다.
C
복사