[백준 JAVA] 10799번 풀이 - 쇠막대기 (자료구조 점점 능숙해😇)
by mini_minpackage baekjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
/**
* 쇠막대기
* 쇠막대기를 편하게 자르기 위해 아래에서 위로 겁쳐 놓고, 레이저를 위에서 수직으로 발사해서
* 쇠막대기를 자르려고 한다.
* 1. 쇠막대기는 자신보다 긴 쇠막대기 위에만 놓을 수 있다.
* 위에 놓는 경우 완전히 포함되도록 놓되, 끝점은 겹치지 않도록 놓는다.
* 2. 각 쇠막대기를 자르는 레이저는 적어도 하나 존재한다.
* 3. 레이저는 어떤 쇠막대기의 양 끝점과도 겹치지 않는다.
*
* 레이저는 () 을 표현한다.
*
* 쇠막대기는 ( 여는 괄호와 ) 닫는 괄호로 표현한다.
*
* 쇠막대기와 레이저 배치를 나타내는 괄호가 주어졌을 때,
* 잘려진 쇠막대기 조각의 총 개수를 구하는 프로그램을 작성하시오.
*
*/
public class _10799 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String problem = br.readLine();
Stack<Character> stack = new Stack<>();
int count = 0;
for(int i=0; i<problem.length(); i++) {
char c = problem.charAt(i);
if(c=='(') {
if(problem.charAt(i+1)==')') {
if(!stack.isEmpty()) {
count += stack.size();
} else {
count += 0;
}
i++; //건너뜀.
} else {
stack.push(c);
}
} else if (c==')') {
count += 1;
stack.pop();
}
}
System.out.println(count);
}
}
실버 2 라고 겁먹었는데
실버 2 난이도 문제라고 살짝 겁먹었는데...
어떻게 풀어야할지 열심히 쳐다보고 고민했더니 금방 풀어냈다!
먼저, 경우의 수를 생각하고 ... 스택을 사용해야겠다고 생각하고...
해당 경우에 어떻게 스택을 활용할까? 생각했다!
풀이
(자르기!) -> stack size 값 3 개 짝둑. (3개)
(자르기!) -> stack size 값 3개 짝둑. (6개)
")" -> 1개 잘린 조각 획득. (stack -> 2) 됨 (7개)
"(" -> 새로 들어옴. stack size 3개 됨
(자르기!) -> stack size 값 3개 짝둑! (10개)
")" -> 1개 잘린 조각 획득. (stack -> 2) 됨 (11개)
(자르기!) -> stack size 값 2개 짝둑 (13개)
")" -> 1개 잘린 조각 획득 (stack -> 1) 됨 (14개)
")" -> 1개 잘린 조각 획득 (stack -> 0) 됨 (15개)
--|-- -> 조각 2개 획득. (17개)
1. 레이저 -> 자르기.
2. ( -> stack 에 넣기.
3. ) -> stack 에서 빼고, 잘린 조각 추가.
'매일매일 알고리즘 공부' 카테고리의 다른 글
[백준 JAVA] 17299번 풀이 - 오등큰수 (오큰수 유형) (0) | 2023.11.07 |
---|---|
[백준 JAVA] 17298번 풀이 - 오큰수 (인덱스 🥺..) (0) | 2023.11.06 |
[백준 JAVA] 17413번 풀이 - 단어 뒤집기2 (크게 보고 큰 틀을 잡자) (0) | 2023.10.27 |
[백준 JAVA] 1406번 풀이 - 에디터 (LinkedList 와 Stack 💖중요!!) (0) | 2023.10.26 |
[백준 JAVA] 9093번 풀이 - 단어 뒤집기 (0) | 2023.10.25 |
블로그의 정보
개발자 미니민의 개발로그
mini_min