Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 요세푸스 문제
- 분할 정복
- toLowerCase()
- 거듭제곱
- IS NOT NULL
- 수학
- 소수 판정
- 문자열
- 그래프 이론
- 공간 복잡도
- 브루트포스
- 정렬
- ListIterator
- 백트래킹
- 그래프 탐색
- ifnull
- 큐
- 연결 리스트
- 자료 구조
- BFS
- 구현
- MySQL
- 정수론
- toUpperCase()
- 시간 복잡도
- 배열
- 그리디 알고리즘
- 스택
- 빅오 표기법
- 너비 우선 탐색
Archives
- Today
- Total
배푸니까
[백준 / JAVA] 10799. 쇠막대기 본문
반응형
https://www.acmicpc.net/problem/10799
10799번: 쇠막대기
여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저
www.acmicpc.net
💻 풀이 결과
💯 최종 코드
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 str = br.readLine();
Stack<Character> stack = new Stack<>();
int curr = 0;
int cnt = 0;
for (int i = 0; i < str.length(); i++) {
switch (str.charAt(i)) {
case '(':
// 삽입한다.
stack.push('(');
// 그 다음꺼까지 봐야한다!!
// 이 판단으로 레이저인지, 시작하는 조각인지를 판단해야할 것 같다.
// 레이저라면 그냥 넘어가면 된다.
if (str.charAt(i + 1) == '(') {
curr++;
}
break;
case ')':
// 레이저를 쏜 것이므로 현재 가지고 있는 막대기수만큼 조각에 더해준다.
if (stack.peek() == '(') {
cnt += curr;
}
// 잘려나간 조각수 +1
// 현재 막대기수를 -1
else {
cnt++;
curr--;
}
// 삽입한다.
stack.push(')');
break;
}
}
// 조각 수 출력
System.out.println(cnt);
}
}
💬 풀이 과정
- 여는 괄호를 만났을 때 스택에 삽입을 한다.
- 삽입 시에는 다음 괄호까지 보고 삽입한 괄호가 여는 괄호인지, 막대기의 시작인지 판단해야 한다.
- 막대기의 시작이라면 현재 막대기 수를 저장하는 curr의 수를 증가시킨다.
- 닫는 괄호를 만났을 때 스택의 top을 확인하고 삽입한다.
- 스택의 top이 여는 괄호라면 레이저에 해당하므로 현재 막대기 수인 curr 만큼 조각 수 cnt에 저장한다.
- 스택의 top이 닫는 괄호라면 막대기의 끝에 해당하므로 조각 수 cnt의 수를 증가시키고 현재 막대기 수인 curr은 감소시킨다.
💡 깨달은 점
1. 스택의 활용
- 문제를 틀리지는 않았지만, 로직을 생각하는 데에 많은 시간이 걸렸다.
- 스택을 활용하는 문제들이 비슷해 보이면서도 조금씩 생각하는 게 달라서 예외를 잘 생각하면서 로직을 짜야할 것 같다.
반응형
'백준' 카테고리의 다른 글
[백준 / JAVA] 24445. 알고리즘 수업 - 너비 우선 탐색 2 (0) | 2023.08.01 |
---|---|
[백준 / JAVA] 24444. 알고리즘 수업 - 너비 우선 탐색 1 (0) | 2023.08.01 |
[백준 / JAVA] 2504. 괄호의 값 (0) | 2023.07.10 |
[백준 / JAVA] 2164. 카드2 (0) | 2023.06.30 |
[백준 / JAVA] 6198. 옥상 정원 꾸미기 (0) | 2023.06.30 |