public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
int answer = solution(input);
System.out.println(answer);
}
private static int solution(String input) {
int count = 0;
Stack<Character> stack = new Stack<>();
for (char x : input.toCharArray()) {
// 열린 괄호일 때,
if (x == '(') {
stack.push(x);
// 닫힌 괄호일 때, peek() 이 열린 괄호인지 아닌지 판단.
} else {
if (stack.peek() == '(') {
// 닫힌 괄호 바로 앞이 열린 괄호이므로 레이저.
// Stack 에 들어있는 열린 괄호 갯수만큼 쇠 막대기가 존재하기 때문에 레이저를 만나면 해당 열린 괄호 갯수만큼 더해야 한다.
// 더하기 전에 레이저의 열린 괄호는 Stack 에서 지워주자.
stack.pop();
count += stack.size();
} else {
// 닫힌 괄호 바로 앞이 열린 괄호가 아니므로 레이저가 이닌 쇠 막대기.
stack.pop();
count ++;
}
}
}
return count;
}
}
2. 두번째 풀이 방식 (정답)
~~~java
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Stack;
public class Section0504 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
int answer = solution(input);
System.out.println(answer);
}
private static int solution(String input) {
int count = 0;
Stack<Character> stack = new Stack<>();
for (int i = 0; i < input.length(); i++) {
if (input.charAt(i) == '(') {
stack.push(input.charAt(i));
} else {
// 레이저라면 ?
if (input.charAt(i - 1) == '(') {
stack.pop();
count += stack.size();
// 쇠 막대기라면 ?
} else {
stack.pop();
count ++;
}
}
}
return count;
}
}
📌 문제
⭐️ 아이디어
🤔 고민한 내용
💪 새롭게 배운 내용
🆘 이해가 어려운 내용
❌ 해결하지 못한 이유
✅ 본인 풀이
🏋️♀️
시도횟수
: 2회 | ⏱걸린시간
: 123ms | 💾메모리
: 26MBpublic class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String input = br.readLine();
}
참고한 자료