문제
10799번: 쇠막대기
여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저
www.acmicpc.net
풀이
스택을 사용하여 풀었다.
기본적으로 )는 무조건 push하고, )일 때 스택을 pop한다. stack.size로 잘린 막대 개수를 카운트한다.
1. (가 들어옴 → stack.push
2. )가 들어옴 → 일단 stack.pop을 하고 charAt(i-1) 확인
( )이면 레이저로 잘린 것이므로 piece += stack.size
) )이면 막대하나의 끝이므로 앞에 (를 하나 없앰 piece++;
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
Stack<Character> stack = new Stack<>();
int piece = 0;
for(int i=0; i<s.length(); i++) {
char c = s.charAt(i);
if(c == '(') {
stack.push(c);
}
else if(c == ')') {
stack.pop();
int bc = s.charAt(i-1);
if(bc == '(') {
piece += stack.size();
}else if(bc == ')') {
piece++;
}
}
}
System.out.println(piece);
}
}
'PS(Java) > 백준' 카테고리의 다른 글
[PS] 백준 1388번 바닥 장식 (0) | 2022.07.06 |
---|---|
[PS] 백준 11655번 ROT13 (0) | 2022.06.03 |
[PS] 백준 10828번 스택 (0) | 2022.05.25 |
[PS] 백준 11004번 K번째 수 (0) | 2022.05.24 |
[PS] 백준 11652번 카드 (0) | 2022.05.23 |