오늘의 학습 키워드
https://www.acmicpc.net/problem/25497
백준 25497번: 기술 연계마스터 임스(실버5) - 자바
- 완주하지 못
공부한 내용 본인의 언어로 정리하기
문자답안
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 inputs = br.readLine();
Stack<Character> sStack = new Stack<>(); // 'S' 사전 기술을 위한 스택
Stack<Character> lStack = new Stack<>(); // 'L' 사전 기술을 위한 스택
int count = 0;
for (char ch : inputs.toCharArray()) {
if (ch == 'L') {
// 'L' 기술이 들어오면 lStack에 추가
lStack.push(ch);
} else if (ch == 'S') {
// 'S' 기술이 들어오면 sStack에 추가
sStack.push(ch);
} else if (ch == 'R') {
// 'R' 기술이 들어왔을 때, lStack에 'L'이 있는지 확인
if (!lStack.isEmpty()) {
lStack.pop(); // 'L'을 사용하여 'R'과 연계 발동
count++;
} else {
break; // 'L' 없이 'R'이 나오면 이후 기술 발동 중지
}
} else if (ch == 'K') {
// 'K' 기술이 들어왔을 때, sStack에 'S'가 있는지 확인
if (!sStack.isEmpty()) {
sStack.pop(); // 'S'를 사용하여 'K'와 연계 발동
count++;
} else {
break; // 'S' 없이 'K'가 나오면 이후 기술 발동 중지
}
} else {
// 숫자 기술은 연계 없이 단독 발동 가능
count++;
}
}
System.out.println(count);
}
}
문제 해석
이 문제는 문제의 난이도보다 문제의 조건을 이해하는 것이 중요하다. 다음은 문제의 조건이다.
- 연계 기술은 두 개의 개별 기술을 순서대로 사용해야만 정상적으로 사용 가능하다.
- 연계할 사전 기술 없이 본 기술을 사용 시 이후 사용하는 기술들은 정상적으로 발동되지 않는다.
- 1~9는 연계 기술 없이 사용 가능하며, 은 의 사전 기술, 은 의 사전 기술이다.
일단 나같은 경우는 스택을 활용하여 문제를 해결하였다.
스택은 두 개를 활용하였고 사전 기술을 보관하는 용도이다.
Stack<Character> sStack = new Stack<>(); // 'S' 사전 기술을 위한 스택
Stack<Character> lStack = new Stack<>(); // 'L' 사전 기술을 위한 스택
문자열 반복문을 진행하면서 사전 기술은 L과 S에 대하여 스택을 add 시켜준다.
for (char ch : inputs.toCharArray()) {
if (ch == 'L') {
// 'L' 기술이 들어오면 lStack에 추가
lStack.push(ch);
} else if (ch == 'S') {
// 'S' 기술이 들어오면 sStack에 추가
sStack.push(ch);
}
...
}
그럼 다음 본 기술은 R과 K 조건을 봐야하는데 위 조건 중 두번째 조건을 넣어줘야한다.
R이 있을때는 사전 기술인 L이 있는 것을 확인해야 하고 사전 기술 없이 R이 나온다면 이후 기술은 방동 금지된다. (반복문을 나가야 한다.)
else if (ch == 'R') {
// 'R' 기술이 들어왔을 때, lStack에 'L'이 있는지 확인
if (!lStack.isEmpty()) {
lStack.pop(); // 'L'을 사용하여 'R'과 연계 발동
count++;
} else {
break; // 'L' 없이 'R'이 나오면 이후 기술 발동 중지
}
} else if (ch == 'K') {
// 'K' 기술이 들어왔을 때, sStack에 'S'가 있는지 확인
if (!sStack.isEmpty()) {
sStack.pop(); // 'S'를 사용하여 'K'와 연계 발동
count++;
} else {
break; // 'S' 없이 'K'가 나오면 이후 기술 발동 중지
}
}
오늘의 회고
오늘 부터 항해99에서 하는 부트캠프를 참가하고 있다. 그 부트캠프도 3주동안 코테를 연습하는데 이번 기회에 코테를 마스터하고 가야될 것 같다.
- 완주하지
'TIL' 카테고리의 다른 글
[TIL-24/11/15] 99클럽 코테 스터디 19일차 TIL 백준 1927번 : 최소 힙 - 자바 (0) | 2024.11.16 |
---|---|
[TIL-24/11/14] 99클럽 코테 스터디 18일차 TIL 백준 26042번 : 식당 입구 대기 줄 - 자바 (0) | 2024.11.15 |
[TIL-24/11/12] 99클럽 코테 스터디 16일차 TIL 백준 2161번 : 카드1 - 자바 (1) | 2024.11.12 |
[TIL-24/11/10] 99클럽 코테 스터디 14일차 TIL 백준 10845번 : 큐 - 자바 (1) | 2024.11.11 |
[TIL-24/11/09] 99클럽 코테 스터디 13일차 TIL - 단어순서 뒤집기 -JAVA (1) | 2024.11.10 |