https://www.acmicpc.net/problem/10799
10799번: 쇠막대기
여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저
www.acmicpc.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
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 NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Stack<Character> stack = new Stack<>();
String input = br.readLine();
int result = 0;
for (int i = 0; i < input.length(); i++) {
if (input.charAt(i) == '(') {
stack.push('(');
} else if (input.charAt(i) == ')') {
stack.pop();
if (input.charAt(i - 1) == '(') {
result += stack.size();
} else {
result++;
}
}
}
System.out.println(result);
}
}
|
cs |
풀이 설명
닫히는 괄호인 ')'가 중요하다. 이게 뭔지에 따라 1이 추가될 수도, 스택의 사이즈가 추가될 수도 있다.
예를 들어 괄호가 ( ) ( ( ( ( ) ( ) ) ( ( ) ) ( ) ) ) 가 있다.
이 중 ( ) ( ( ( ( ) ( ) ) ( ( ) ) ( ) ) ) <-- 노란 형광펜 친 부분을 보면
' ) '이 들어오려 할 때 이미 스택의 가장 윗부분(i-1번째) '('이 pop 되었으므로 result는 0이다.
남는 괄호 중 ( ( ( ( ) ( ) ) ( ( ) ) ( ) ) ) 노란형광펜 친부분을 보자.
그러면 result의 값은 3이다.
다시 남는 괄호 중 ( ) ) ( ( ) ) ( ) ) ) 노란형광펜 부분도 위의 경우와 마찬가지로 가장 끝에 들어오는 ( )만 빼고 나머지 3개가 stack의 size가 될 것이므로 result값은 6이다.
) ( ( ) ) ( ) ) ) <-- 얘를 보면
result값은 8이다.
( ( ) ) ( ) ) )
result 에 3이 더해지므로 11이다.
) ( ) ) ) result는 2만큼 더해지므로 13
( ) ) ) result는 2만큼 더해지므로 15
) ) 1만큼 더해지므로 16
) 1만큼 더해지므로 17
다른 사람들이 쓴 코드를 보며 배우는것 보면 아직 스택 알고리즘 짜는 능력이 부족한 것 같다..ㅜ (뭐 늘 그랬지만 ㅋㅋ) 다른 문제도 더 풀어봐야겠당!
'알고리즘 > 스택,큐,덱' 카테고리의 다른 글
[java 백준] 실버 4/ 10866번 덱 (0) | 2021.08.29 |
---|---|
[java 백준] 실버 4/10845번 큐 (0) | 2021.08.29 |
[Queue개념] Queue/원형 Queue (0) | 2021.08.29 |
[java 백준] 실버 3/1874번 스택수열 (0) | 2021.08.29 |
[java 백준] 실버 4/ 10828번 스택 (0) | 2021.08.20 |
댓글