728x90

<오늘의 학습 키워드>
- 스택
<오늘의 문제>
제목 : 백준 / 실버5 / 25497번 스킬연계마스터임스
https://www.acmicpc.net/problem/25497
<풀이>
정답은 더보기
더보기
package BOJ.자료구조.기술연계마스터임스_25497.insub2004_241113;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws Exception {
int answer = 0;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
String str = br.readLine();
Stack<Character> sStack = new Stack<>();
Stack<Character> lStack = new Stack<>();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c >= '1' && c <= '9') {
answer++;
} else if (c == 'S') {
sStack.push(c);
} else if (c == 'L') {
lStack.push(c);
} else if (c == 'K') {
if (!sStack.empty()) {
sStack.pop();
answer++;
} else {
break;
}
} else if (c == 'R') {
if (!lStack.empty()) {
lStack.pop();
answer++;
} else {
break;
}
}
}
System.out.println(answer);
br.close();
}
}
- 입력 받을 문자열을 순회하면서 char c가 1~9일 때는 바로바로 answer의 변수를 증가
- c가 선수 스킬인 S,L일 경우 각각 S스택과 L스택에 넣어준다.
- c가 K일 경우
- 우선 K의 선수 스킬인 S가 있는지 보기 위해서 S스택이 비어있는지 확인하고 비어있지 않으면 한 개를 pop한 후 answer 증가
- 만약 비어있으면 잘못 입력된 오류로 바로 break해서 answer를 출력 후 시스템을 종료한다.
- c가 R일 경우
- 우선 R의 선수 스킬인 L이 있는지 보기 위해서 L스택이 비어있는지 확인하고 비어있지 않으면 한 개를 pop한 후 answer 증가
- 만약 비어있으면 잘못 입력된 오류로 바로 break해서 answer를 출력 후 시스템을 종료한다.
<결론, 주의할점>
- 문제를 잘 읽어야 하는게 중간에 오류인 스크립트가 있으면 바로 시스템을 종료해야한다.
- 처음에 이 부분 때문에 한참 고생했다.
- 입력 예제에서 S124L23KR인 경우에는 정상적으로 작동이 되는 것이다.
- 각각의 연계 기술 사이에 다른 선수 스킬이 오는 경우는 상관이 없고 후위 스킬이 오면 스크립트 오류인 것 같다. 이부분에서도 엄청 시간 잡아먹었다...
반응형
'Study or Lecture > 항해 99클럽 코딩테스트 스터디' 카테고리의 다른 글
| 항해 99클럽 코딩테스트 스터디 19일차 TIL (자바 / 비기너) (0) | 2024.11.15 |
|---|---|
| 항해 99클럽 코딩테스트 스터디 18일차 TIL (자바 / 비기너) (1) | 2024.11.14 |
| 항해 99클럽 코딩테스트 스터디 16일차 TIL (자바 / 비기너) (0) | 2024.11.12 |
| 항해 99클럽 코딩테스트 스터디 일차 15TIL (자바 / 비기너) (2) | 2024.11.11 |
| 항해 99클럽 코딩테스트 스터디 14일차 TIL (자바 / 비기너) (0) | 2024.11.10 |
댓글