[SWEA] 5432. 쇠막대기 자르기 _ Java

jii0_0·2022년 8월 18일
0

SW Expert Academy

목록 보기
17/33
post-thumbnail

쇠막대기 자르기 (D4)

문제 링크

BOJ의 쇠막대기 문제랑 같은 문제 !

  • 여러개의 쇠막대기를 위아래로 겹쳐놓고 레이저를 쐈을 때 조각난 쇠막대기의 수를 계산하는 문제
  • 쇠막대기 문제라고는 하지만 그냥 괄호개수를 확인하는 문제이다
  • stack을 써서 풀 수 있지만, 나는 그냥 String의 charAt을 사용해서 앞에서부터 읽어나갔다
  • cnt 변수와 sum 변수를 사용
    • cnt 변수는 괄호 짝 ( ) 이 나올 때까지 ( 열린괄호의 개수를 세는 변수
    • sum 은 괄호 짝이 맞아서 레이저가 나올 때 / 닫힌 괄호일 때 합을 갱신
  • 닫힌 괄호가 나오면 바로 앞의 괄호가 열린 괄호인지 확인함
    • 열린 괄호이면 레이저를 쏘는 것이므로 cnt-1 해주고 sum 에 cnt 만큼 더해줌
    • 닫힌 괄호이면 쇠막대기 하나의 끝 조각 이므로 sum+1 , cnt-1 해줌

Solution

package swea;

import java.util.Scanner;

// 쇠막대기 자르기
public class p5432 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int T = sc.nextInt();
		
		for(int t=1; t<=T; t++) {
			String str = sc.next();
			int sum = 0, cnt = 0;
			for(int i=0; i<str.length(); i++) {
				if (str.charAt(i) == '(') {
					cnt++;
				}
				else {
					cnt--;
					if (str.charAt(i-1) == '(') {
						sum += cnt;
					}
					else {
						sum++;
					}
				}
			}
			
			System.out.printf("#%d %d\n", t, sum);
		}
	}
}
profile
느려도 꾸준히

0개의 댓글