문제 풀이 (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을 추가해주면 된다는 것을 인지하자.

+ Recent posts