본문 바로가기

백준

이런저런 문제들 #10799: 쇠막대기 [JAVA]

https://www.acmicpc.net/problem/10799

 

10799번: 쇠막대기

여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저

www.acmicpc.net

 

 

 


 

 

 

 

 

문제 접근

 

 

 

 

못품

 

 

[ 참조 ] https://steady-coding.tistory.com/10

 

 

굳이 평소 하던 방식처럼 stringTokenizer로(물론 여기선 stringTokenizer 못씀.띄어쓰기 안되있.) 하나씩 끊어서 순차적으로 다음거 처리하지 x. 이전에 나온 괄호도 봐야

->String으로 받아서 charAt(i)

 

 

 

 

 

 

 

 

 

코드

 

 

 

 

스택 사용

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;

public class Main {

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

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		String input = br.readLine();

		Deque<Character> stack = new ArrayDeque<>();

		int count = 0;

		for (int i = 0; i < input.length(); i++) {

			if (input.charAt(i) == '(') {

				stack.addFirst(input.charAt(i));
				continue;
			}

			if (input.charAt(i) == ')') {

				stack.pollFirst();

				if (input.charAt(i - 1) == '(') { // 레이저
					count += stack.size();
				} else {
					count++;
				}

			}
		}

		System.out.println(count);

	}

}

 

 

 

 

 

 

 

 

 

 

스택 사용 x

 

 

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

public class Main {

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

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		String input = br.readLine();

		int count = 0;

		int stick = 0;

		for (int i = 0; i < input.length(); i++) {

			if (input.charAt(i) == '(') {

				stick++;
				continue;
			}

			if (input.charAt(i) == ')') {

				stick--;

				if (input.charAt(i - 1) == '(') { // 레이저
					count += stick;
				} else {
					count++;
				}

			}
		}

		System.out.println(count);

	}

}