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));
char[] str = br.readLine().toCharArray(); // 쇠막대기와 레이저의 배치를 나타내는 괄호 표현
Stack<Integer> s = new Stack<>();
int answer = 0; // 잘려진 조각의 총 개수
int index = 0; // 인덱스
for (int i = 0; i < str.length; i++) {
if (str[i] == '(') { // (인경우
s.push(index++); // 쇠막대기의 시작위치 인덱스 스택에 삽입
} else { // )인경우
if (index - s.peek() == 1) { // 레이저인 경우
answer += s.size() - 1; // 쇠막대기의 개수만큼 총개수 누적
} else { // 막대기끝인 경우
answer++; // 1조각 누적
}
s.pop();
}
}
System.out.println(answer); // 출력
}
}
설명
'('인 경우 쇠막대기의 위치를 스택에 푸시
')'인 경우
- 1. '('와 인접한 쌍이면 레이저이므로 스택의 사이즈-1(잘린 쇠막대기 개수) 만큼을 누적해서 더해줌
- 2. 그외의 경우 쇠막대기의 끝이므로 1만큼 더해줌
728x90
'알고리즘 > 자료구조' 카테고리의 다른 글
[백준][JAVA] 2504번 괄호의 값 (0) | 2024.03.08 |
---|---|
[백준][JAVA] 2822번 점수 계산 (0) | 2024.01.29 |
[백준][JAVA] 1158번 요세푸스 문제 (0) | 2023.12.18 |
[백준][JAVA] 2493번 탑 (0) | 2023.12.18 |
[백준][JAVA] 2164번 카드2 (0) | 2023.12.18 |