본문 바로가기
  • 개발하는 곰돌이
Algorithm/BOJ

[Kotlin] 백준 25497 : 기술 연계마스터 임스

by 개발하는 곰돌이 2023. 1. 6.

문제 링크

 

25497번: 기술 연계마스터 임스

$1$, $2$, $S$ - $K$, $2$로 스킬을 성공적으로 총 4번 사용했다.

www.acmicpc.net



문제 해설

이전에 많이 나왔던 괄호 짝 맞추기와 비슷하게 스택을 활용하는 문제이다. 연계 기술 LR과 SK의 짝을 맞춰서 기술 성공 횟수를 카운트해야 하는데, 문제에 연계 기술을 사용할 때 사전 기술과 본 기술 사이에는 다른 기술을 사용해도 연계가 정상적으로 이루어진다는 언급이 있다. 즉, LSRK이나 SLKR 등과 같이 L, R, S, K가 섞여있어도 상관없다는 것이다. 

 

이를 구현하기 위해 LR의 짝을 맞출 스택과 SK의 짝을 맞출 스택, 총 2개의 스택을 선언하여 문제를 해결한다. 연계 기술은 사전 기술과 본 기술이 모두 성공해야 1회로 카운트하므로 L, S는 스택에 삽입연산만 하고, R, K는 스택에서 요소를 제거한 후 기술 성공 횟수를 카운트한다.

 

만약 사전 기술 없이 본 기술을 사용했다면(스택 제거 연산을 해야하는데 스택이 비어있다면) 그 즉시 기술 체크를 중단하고 지금까지 성공한 기술 횟수를 출력한다.


Code

import java.util.Stack

fun main() = with(System.`in`.bufferedReader()) {
    val LR = Stack<Char>()
    val SK = Stack<Char>()
    readLine()
    val skill = readLine()
    var count = 0
    for (c in skill) {
        when (c) {
            'L' -> LR.push(c)
            'R' -> {
                if (LR.isEmpty())
                    break
                else {
                    LR.pop()
                    count++
                }
            }
            'S' -> SK.push(c)
            'K' -> {
                if (SK.isEmpty())
                    break
                else {
                    SK.pop()
                    count++
                }
            }
            else -> count++
        }
    }
    println(count)
}

댓글