본문 바로가기
Study or Lecture/항해 99클럽 코딩테스트 스터디

항해 99클럽 코딩테스트 스터디 17일차 TIL (자바 / 비기너)

by yoondoo 2024. 11. 14.
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인 경우에는 정상적으로 작동이 되는 것이다.
    • 각각의 연계 기술 사이에 다른 선수 스킬이 오는 경우는 상관이 없고 후위 스킬이 오면 스크립트 오류인 것 같다. 이부분에서도 엄청 시간 잡아먹었다...
반응형

댓글