문제 풀이 (JAVA)
import java.util.*;
public class part5_5 {
public static void main(String[] args) {
// 쇠막대기
Scanner input = new Scanner(System.in);
String str = input.nextLine();
int answer = solution(str);
System.out.print(answer);
}
private static int solution(String s) {
int result=0;
Stack<Character> stack = new Stack<>();
char [] ch = s.toCharArray();
for(int i=0; i<ch.length; i++) {
if(ch[i] == '(') {
stack.push(ch[i]);
}else if(ch[i]==')') {
stack.pop();
if(ch[i-1] == '(') { // 레이저일경우
result += stack.size(); // 스택의 사이즈만큼 증가
}else { // 레이저가 아닐경우(막대의종료)
result ++; // 막대의 끝으로 +1 증가
}
}
}
return result;
}
}
주요 핵심 포인트
1. 여는 괄호 '('를 만날시 스택에 추가한다.
2-1. 닫는괄호 ')'를 만날시 현재 인덱스 -1번째 문자가 여는괄호라면 스택에서 제거하고 결과값을 1 추가한다.
2-2. 닫는괄호 ')'의 현재 인덱스 -1번째 문자가 '(' 여는괄호가 아니라면 막대기의 종료로써 스택에서 제거하고 남아있는 스택의 개수만큼 결과값에 추가한다.
개선해야할 사항
1. 처음 문제를 이해하지 못하여 2-1의 케이스를 생각하지 못하였다. 막대기가 종료될때에는 +1을 추가해주면 된다는 것을 인지하자.
'알고리즘' 카테고리의 다른 글
[큐] 교육과정 설계(인프런 알고리즘 5-7) (0) | 2022.06.26 |
---|---|
[큐] 공주 구하기 (인프런 알고리즘 5-6) (0) | 2022.06.26 |
[스택] 후위식 연산(postfix) (인프런 알고리즘 5-4) (0) | 2022.06.20 |
[스택+이차원행렬] 크레인 인형뽑기(카카오) (인프런 알고리즘 5-3) (0) | 2022.06.19 |
[스택] 괄호문자제거 (인프런 알고리즘 5-2) (0) | 2022.06.19 |