[SWEA] 5432. 쇠막대기 자르기(D4)

ERror.ASER·2021년 2월 4일
0

SW Expert Academy

목록 보기
2/11
post-thumbnail

문제 - 5432.쇠막대기 자르기(D4)


풀이

이 문제가 D4인 이유는 막대기와 레이저를 구분하기 어려워서라고 생각한다.
막대기도 괄호로 표시하고, 레이저도 괄호로 표시하기 때문에 판별을 잘 해줘야한다.
하지만 replace함수를 쓴다면 쉽고 간편하게 레이저를 막대와 분리할 수 있다.

String change = input.replace("()", "*");			

이렇게 ()를 로 바꿔주면 간편하게 막대와 를 바꿔줄 수 있다.
그 다음에는 로직이 쉬워진다. 변수명을 아무렇게나 정한 것 같아서 좀 그렇지만..
original은 현재 자를 수 있는 막대의 수, result는 결과이다.
*를 만나면 내가 가지고 있는 막대의 수만큼 막대기가 늘어난다.
그래서 result에 original을 더해준다.
(를 만나면 가지고 있는 막대기가 하나 더 증가했다는 뜻이니 original과 result에 1씩 더해준다.
)를 만나면 현재 가지고 있는 막대기가 하나 줄어든다는 뜻이니 original에 -1을 해준다.

import java.util.Scanner;
import java.io.FileInputStream;

class Solution
{
	public static void main(String args[]) throws Exception
	{
        Scanner sc = new Scanner(System.in);
		
		int t = sc.nextInt();
		
		for(int tc = 1; tc<=t; tc++) {
			String input = sc.next();
			String change = input.replace("()", "*");
			
			int original = 0;
			int result = 0;
			
			for(int i=0; i<change.length(); i++) {
				if(change.charAt(i) == '*') {
					result += original;
				}else if(change.charAt(i) == '(') {
					original ++;
					result ++;
				}else if(change.charAt(i) == ')') {
					original--;		
				}
			}
			System.out.println("#"+tc+" "+result);
		}
	}
}
profile
지우의 블로그

0개의 댓글