반응형
package com.ji.beakjoon;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;

public class IronBar {

	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		int cutIronCount = 0;

		String bracketStr = String.valueOf(br.readLine());
		Stack<Integer> stack = new Stack<>();

		for (int i = 0; i < bracketStr.length(); i++) {
			// 열린 괄호 일 경우
			if (bracketStr.substring(i, i + 1).equals("(")) {
				stack.push(i); // '('경우만 저장
			} else { // 닫힌 괄호 일 경우
				
				// stack의 마지막 저장 index가 바로 전 index와 같으면 레이저('()')를 의미
				if (stack.peek() == i - 1) {
					//스택 안에는 쇠파이프 시작점 index가 저장되므로 
					//레이저에 의해서 잘려진 쇠파이프와 동일함
					cutIronCount += stack.size();
				} else {
					// ')'')' 일경우는 단순 증가
					cutIronCount++;
				}
				stack.pop();
			}
		}

		// 스택 사용안하는 풀이
//		for (int i = 0; i < input.length(); i++) {
//            char c = input.charAt(i);
// 
//            if (c == '(') { // 열린 괄호면 open에 1을 더해 줌.
//                open++;
//            } else { // 닫힌 괄호일 경우,
//                open--; // 일단 open에 1을 빼 줌.
// 
//                if (input.charAt(i - 1) == '(') { // 그 전 괄호가 열린 괄호면 레이저를 의미.
//                    ans += open; // open의 값만큼 더해 줌.
//                } else { // 그 전 괄호가 닫힌 괄호면 레이저가 아님.
//                    ans++; // 단순히 1을 더해 줌.
//                }
//            }
//        }

		bw.write(String.valueOf(cutIronCount));

		br.close();
		bw.flush();
		bw.close();
	}

}
728x90

'[개발관련] > 코테준비' 카테고리의 다른 글

[백준] 숨바꼭질  (0) 2021.06.13
[백준] ATM  (0) 2021.06.13
[백준] 잃어버린 괄호  (0) 2021.06.13
[백준] 1로 만들기  (0) 2021.06.13
[백준] 바이러스  (0) 2021.06.13

+ Recent posts