[백준] 25497번 - 기술 연계마스터 임스 (Silver 5)
업데이트:
문제 링크
백준 25497번 - 기술 연계마스터 임스 (Silver 5)
문제 설명
주어진 순서대로 기술을 사용할 때, 기술이 정상적으로 발동하는 횟수를 출력하시오.
기술들의 정보는 아래와 같다.
- 사용할 수 있는 기술로는 1 ~ 9, L, R, S, K가 있다.
- 기술 1 ~ 9는 단독으로 사용할 수 있다.
- L, R, S, K는 연계 기술로, 사전 기술과 본 기술을 순서대로 사용해야 발동한다.
- 본 기술 R은 사전 기술 L이 사용된 상태여야만 발동 가능하다.
- 본 기술 K는 사전 기술 S가 사용된 상태여야만 발동 가능하다.
- 연계 기술을 적당한 사전 기술 없이 사용했다면, 이후의 기술들은 전부 발동이 불가능하다.
- 사전 기술과 본 기술 사이에 다른 기술을 사용하는 것은 가능하다.
단, 연계 기술은 사전 기술과 본 기술 모두 발동했을 때 하나의 기술이 발동한 것으로 센다.
정답 코드 및 설명
기술 1 ~ 9는 단순 카운팅이고, 연계 기술이 핵심이다.
연계 기술이 꼬이지 않고 발동하려면 사전 기술이 먼저 사용된 상태여야 한다.
각 시점마다 본 기술과 연계되지 않은 사전 기술의 횟수를 저장해두면 이를 해결할 수 있다.
예를 들어보자. 기술을 쓰려는 순서가 LLRLRR이라고 하자.
- i = 0일 때, 본 기술 R과 연계되지 않은 사전 기술 L의 횟수 countL = 1이다.
- i = 1일 때는 countL = 2이다.
- i = 2일 때, 본 기술 R이 발동했다. 전체 기술 발동 횟수는 1이고, countL = 1이다.
- i = 3일 때, countL = 2이다.
- i = 4일 때, 본 기술 R이 발동했다. 전체 기술 발동 횟수는 2이고, countL = 1이다.
- i = 5일 때, 본 기술 R이 발동했다. 전체 기술 발동 횟수는 3이고, countL = 0이다.
기술이 꼬이는 경우는 연계되지 않은 사전 기술의 횟수가 0인데 본 기술을 발동하려고 시도하는 경우에 해당한다. 코드의 16 ~ 30행이 연계 기술을 처리하는 부분에 해당한다.
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
33
34
35
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));
int n = Integer.parseInt(br.readLine());
String command = br.readLine();
int count = 0;
int countL = 0, countS = 0;
for (int i = 0; i < n; i++) {
char curr = command.charAt(i);
if (curr >= '1' && curr <= '9') count++;
else if (curr == 'L') countL++;
else if (curr == 'S') countS++;
else if (curr == 'R') {
if (countL > 0) {
count++;
countL--;
}
else break;
} else if (curr == 'K') {
if (countS > 0) {
count++;
countS--;
}
else break;
}
}
System.out.println(count);
}
}
댓글남기기