• 문제 링크
10799번: 쇠막대기
여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저
www.acmicpc.net
• 풀이 과정
기본적으로 9012번 문제와 유사한 문제이다
[백준] 9012 괄호 - Data Structure / Java
• 문제 링크 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄
graycode.tistory.com
입력받은 문자가 '(' 일 경우 스택에 push() 하고 ')' 일 경우 pop() 을 하는 로직은 동일하나
pop() 을 한 후 이전에 입력된 문자가 '(' 일 경우 레이저를 의미하므로 현재 스택의 크기만큼 result 변수에 더해주며
그 외의 경우 막대를 의미하므로 result++ 을 수행한다.
이렇게 막대를 교차하지 않는 레이저, 이미 절단한 막대와 레이저까지 차례대로 제거되며
범위 내에서 절단한 막대의 총 개수가 결과 값으로 출력된다.
• 풀이 코드
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 Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
Stack<Character> stk = new Stack<>();
char[] input = br.readLine().toCharArray();
int result = 0;
for (int i = 0; i < input.length; i++) {
if (input[i] == '(')
stk.push(input[i]);
if (input[i] == ')') {
stk.pop();
if (input[i - 1] == '(')
result += stk.size();
else
result++;
}
}
bw.write(result + "\n");
bw.flush();
}
}
'Problem Solving > Baekjoon' 카테고리의 다른 글
[백준] 17413 단어 뒤집기 2 - Data Structure / Java (0) | 2022.06.19 |
---|---|
[백준] 9093 단어 뒤집기 - Data Structure / Java (0) | 2022.06.18 |
[백준] 1406 에디터 - Data Structure / Java (0) | 2022.06.16 |
[백준] 1874 스택 수열 - Data Structure / Java (0) | 2022.06.15 |
[백준] 1158 요세푸스 문제 - Data Structure / Java (0) | 2022.06.14 |
댓글