임스 이 녀석 연계 기술하는거 짜증난다… 하나의 스택에 쌓아서 처리하려고 했는데 5번 실패하고 작성하는 글..
여태 하나의 스택으로 본기술과 사전기술들을 담아서 페어를 맞추려고 했는데... 그게 잘못된거였다.
페어당 하나의 스택으로 구현해야한다.
왜? LKR 이런것도 L-R로 출력값이 1이 나와야한다. 한 스택에 모든 기술들을 넣고 짝을 맞추려고 하면 LKR와 같은 경우는 해결하기 힘들다.
오늘의 문제는 기술 연계 마스터 임스가 하는 기술의 수를 세는 것이다. 문제의 조건은 다음과 같다.
임스가 정해진 순서대로 N개의 기술을 사용할 때, 정상적으로 발동된 기술의 총 횟수를 구하는 것이 목표 !
사전 기술 - 본 기술
페어가 맞춰 졌을 때 정상적으로 기술을 사용했다고 체크하므로 Stack을 사용해서 문제를 풀 생각이다.
break;
한다. import java.io.*;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(bf.readLine());
String str = bf.readLine();
Stack<Character> sStack = new Stack<>();
Stack<Character> lStack = new Stack<>();
int result = 0;
for (int i = 0; i < n; i++) {
char x = str.charAt(i);
if (Character.isDigit(x)) { // 독립적으로 사용할 수 있는 숫자 기술
result++;
} else if (x == 'L') { // 'L'을 사전 기술로 준비
lStack.add(x);
} else if (x == 'S') { // 'S'를 사전 기술로 준비
sStack.add(x);
} else if (x == 'R') { // 본 기술 'R'을 사용하려면 'L' 필요
if (!lStack.isEmpty()) {
lStack.pop(); // 사전 기술 'L' 사용
result++;
} else {
break; // 사전 기술이 없으면 이후 발동 실패
}
} else if (x == 'K') { // 본 기술 'K'를 사용하려면 'S' 필요
if (!sStack.isEmpty()) {
sStack.pop(); // 사전 기술 'S' 사용
result++;
} else {
break; // 사전 기술이 없으면 이후 발동 실패
}
}
}
System.out.println(result);
}
}