문제
두 수의 합이 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
복사

