1. 문제
1. 레이저는 여는 괄호와 닫는 괄호의 인접한 쌍 ‘( ) ’ 으로 표현된다. 또한, 모든 ‘( ) ’는 반 드시 레이저를 표현한다.
2. 쇠막대기의 왼쪽 끝은 여는 괄호 ‘ ( ’ 로, 오른쪽 끝은 닫힌 괄호 ‘) ’ 로 표현된다.
2 - 1. 나의 풀이
풀지 못함.
닫는 괄호 ' ) ' 가 나왔을 때, 이를 레이저인지 쇠막대기의 끝인지 stack 으로만 판단하려고 해서 풀지 못했다.
3 - 1. 강의 풀이
stack 만 아니라 쇠막대기를 받은 String.charAt(i - 1)을 사용해서 닫는 괄호 ' ) ' 가 나왔을 때, 이를 레이저인지 쇠막대기의 끝인지 판단할 수 있었다.
3 - 2. 강의 코드
package Stack_Queue;
import java.util.*;
public class stack_05 {
public static int solution(String str) {
int answer = 0;
Stack<Character> st = new Stack<>();
for (int i = 0; i < str.length(); i++) {
char tmp = str.charAt(i);
if(tmp=='(') st.push(tmp);
else{
if(str.charAt(i-1) == '('){
st.pop();
answer += st.size();
}else{
st.pop();
answer += 1;
}
}
}
return answer;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
System.out.println(solution(str));
}
}
4. 얻어갈 점
며칠 뒤에 다시 풀려 했으나 String.charAt(i - 1)을 떠올리지 못했다.
정진하자.
'알고리즘 > Stack, Queue(자료구조)' 카테고리의 다른 글
7. 교육과정 설계 (1) | 2023.10.19 |
---|---|
6. 공주 구하기 (1) | 2023.10.19 |
4. 후위식 연산 (1) | 2023.10.19 |
3. 크레인 인형뽑기 (0) | 2023.10.19 |
2. 괄호문자제거 (0) | 2023.10.08 |