27497번: 알파벳 블록백준/문제2024. 7. 31. 01:30
Table of Contents
문제 출처 : https://www.acmicpc.net/problem/27497
언어 : Kotlin
문제 설명 :
스타는 알파벳 블록을 일렬로 조립하여 문자열을 만드는 게임을 만들었다. 각 블록에는 문자 하나가 적혀 있으며 게임에는 각각 다음 기능을 수행하는 세 개의 버튼이 있다.
- 문자열 맨 뒤에 블록 추가
- 문자열 맨 앞에 블록 추가
- 문자열을 구성하는 블록 중 가장 나중에 추가된 블록 제거
게임은 처음에 빈 문자열로 시작하며 빈 문자열일 때 문자열을 구성하는 블록 중 가장 나중에 추가된 블록을 제거하는 버튼을 누를 경우 아무런 동작도 하지 않는다. 버튼을 누른 횟수와 누른 버튼이 순서대로 주어질 때 완성된 문자열을 구하여라.
입력 :
첫째 줄에 버튼을 누른 횟수 N이 주어진다. (1 ≤ N ≤ 1,000,000)
둘째 줄부터 N개의 줄에는 버튼을 누른 순서대로 누른 버튼에 대한 정보를 주며 아래와 같은 형식으로 주어진다.
- 1 c : 문자열 맨 뒤에 c가 적힌 블록 추가
- 2 c : 문자열 맨 앞에 c가 적힌 블록 추가
- 3 : 문자열을 구성하는 블록 중 가장 나중에 추가된 블록 제거
c는 알파벳 대문자 또는 소문자로 주어진다.
출력 :
완성된 문자열을 출력한다. 완성된 문자열이 빈 문자열인 경우 0을 출력한다.
제한 사항 :
- 시간 제한 : 1초
- 메모리 제한 : 1024MB
입출력 예 :
입력 | 출력 |
5 1 a 2 b 1 c 3 3 |
a |
9 1 c 2 n 1 h 1 o 2 i 1 R 3 2 S 1 n |
Sinchon |
7 2 Y 3 1 R 3 3 2 n 2 O |
On |
11 1 u 3 2 z 3 1 s 2 A 3 1 a 3 3 3 |
0 |
풀이 :
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 n = readLine().toInt()
val queue = LinkedList<String>()
val order = LinkedList<Boolean>()
repeat(n) {
val cmd = readLine().split(" ")
when (cmd[0]) {
"1" -> {
queue.addLast(cmd[1])
order.add(true)
}
"2" -> {
queue.addFirst(cmd[1])
order.add(false)
}
"3" -> {
try {
val cur = order.pollLast()
if (cur) queue.removeLast() else queue.removeFirst()
} catch (_: NullPointerException) { }
}
}
}
bw.write(if (queue.isNotEmpty()) queue.joinToString("") else "0")
bw.flush()
bw.close()
}
'백준 > 문제' 카테고리의 다른 글
13506번: 카멜레온 부분 문자열 (0) | 2024.08.01 |
---|---|
13297번: Quick Estimates (0) | 2024.08.01 |
25178번: 두라무리 휴지 (0) | 2024.07.31 |
27962번: 오렌지먹은지오렌지 (0) | 2024.07.30 |
18245번: 이상한 나라의 암호 (0) | 2024.07.30 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!