16120번: PPAP백준/문제2024. 2. 20. 15:07
Table of Contents
문제 출처 : https://www.acmicpc.net/problem/16120
언어 : Kotlin
문제 설명 :
bryan은 PPAP를 좋아한다. bryan은 어떻게 하면 사람들에게 PPAP를 전파할 수 있을까 고민하던 중 PPAP 문자열이라는 것을 고안하게 되었다.
PPAP 문자열은 문자열 P에서 시작하여, 문자열 내의 P를 PPAP로 바꾸는 과정을 반복하여 만들 수 있는 문자열로 정의된다. 정확하게는 다음과 같이 정의된다.
P는 PPAP 문자열이다.
PPAP 문자열에서 P 하나를 PPAP로 바꾼 문자열은 PPAP 문자열이다.
예를 들어 PPAP는 PPAP 문자열이다. 또한, PPAP의 두 번째 P를 PPAP로 바꾼 PPPAPAP 역시 PPAP 문자열이다.
문자열이 주어졌을 때, 이 문자열이 PPAP 문자열인지 아닌지를 알려주는 프로그램을 작성하여라.
입력 :
첫 번째 줄에 문자열이 주어진다. 문자열은 대문자 알파벳 P와 A로만 이루어져 있으며, 문자열의 길이는 1 이상 1,000,000 이하이다.
출력 :
첫 번째 줄에 주어진 문자열이 PPAP 문자열이면 PPAP를, 아닌 경우 NP를 출력한다.
제한 사항 :
- 시간 제한 : 1초 (추가 시간 없음)
- 메모리 제한 : 512MB
입출력 예 :
입력 | 출력 |
PPPAPAP | PPAP |
PPAPAPP | NP |
풀이 :
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import java.util.*
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
val bw = BufferedWriter(OutputStreamWriter(System.out))
val str = readLine()
val stack = Stack<Char>()
var check = true
for (i in str.indices) {
val cur = str[i]
if (cur == 'P') stack.push('P')
else {
if (stack.size >= 2 && i < str.length - 1 && str[i + 1] == 'P') {
repeat(2) { stack.pop() }
} else {
check = false
break
}
}
}
bw.write(if (stack.size == 1 && check) "PPAP" else "NP")
bw.flush()
bw.close()
}
'백준 > 문제' 카테고리의 다른 글
5789번: 한다 안한다 (0) | 2024.02.21 |
---|---|
4889번: 안정적인 문자열 (0) | 2024.02.21 |
2386번: 도비의 영어 공부 (0) | 2024.02.20 |
1871번: 좋은 자동차 번호판 (0) | 2024.02.20 |
6321번: IBM 빼기 1 (0) | 2024.02.19 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!