본문 바로가기
알고리즘/SWEA

[Java] SWEA 5432번 쇠막대기 자르기

by 컴공맨 2021. 3. 17.
 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


풀이

스택을 이용해서 문자열에서 현재 문자가 '(' 일 경우 '('를 카운팅 할 인덱스를 따로 두어 해당 인덱스로 스택에 추가했습니다.

다음으로 ')' 일 경우 만약 '('를 카운팅한 인덱스와 스택의 top의 결과가 1이라면 레이저 이므로 현재 스택의 크기가 잘린 쇠막대기의 개수가 됩니다.

다음으로 1이 아니라면 쇠막대기가 끝났으므로 해당 쇠막대기의 끝 부분또한 포함 시켜야 하므로 +1을 해주어 해결했습니다.


코드

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

public class Solution {
	public static int answer;
	public static String s;
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder("");
		
		int T = Integer.parseInt(br.readLine());
		for (int tc = 1; tc <= T; ++tc) {
			Stack<Integer> stk = new Stack<Integer>();
			
			s = br.readLine();
			answer = 0;
			
			int idx = 0;
			for (int i = 0; i < s.length(); ++i) {
				if (s.charAt(i) == '(') {
					stk.push(idx++);
				}
				else if (s.charAt(i) == ')') {
					if (idx - stk.peek() == 1) {
						stk.pop();
						answer += stk.size();
					}
					else {
						stk.pop();
						answer += 1;
					}
				}
			}
			
			sb.append("#").append(tc).append(" ").append(answer).append("\n");
		}
		
		System.out.print(sb);
	}
}

 

pyo7410/Algorithm

1일 1커밋을 목표로! Contribute to pyo7410/Algorithm development by creating an account on GitHub.

github.com