스택 수열 - BOJ_1874(Kotlin)
스택 수열 - BOJ_1874(Stack, Queue, BufferdWriter-사용주의)
이번 문제는 Stack , Queue 개념을 활용해서 스택 수열을 구현하는 문제이다.
출처: https://www.acmicpc.net/problem/1874
배운 점
알고리즘은 맞는 것 같은데 계속 출력 초과가 발생하는 상황이었다.
다른 자바 언어 유저가 쓴 글을 보니 BufferdWriter 클래스를 사용시 버퍼가 일정 크기를 넘어서면 자동으로 flush해버리는 경우가 발생해 출력이 초과될 수 있다는 글이었다.
따라서 BufferdWriter 클래스의 버퍼 대신 StringBuilder 객체를 활용하는 방식으로 코드를 수정하니 정상 답안 처리가 되었다!!
비슷한 상황에서 같은 실수를 반복하지 않도록 조심하자
// 2022-01-26
// https://www.acmicpc.net/problem/1874
import java.io.*
import java.lang.StringBuilder
import java.util.*
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
// BufferedWriter의 경우 일정 크기 이상 버퍼가 커지면 자동flush 문제가 발생(출력초과)
// 따라서 기존 bw를 주석처리 해주고 StringBuilder 을 사용하자!!!!!!!
// val bw = BufferedWriter(OutputStreamWriter(System.`out`))
val sb = StringBuilder()
val queue:Queue<Int> = LinkedList()
val queue2:Queue<Int> = LinkedList()
val stack = Stack<Int>()
repeat(readLine().toInt()){
queue.add(readLine().toInt())
queue2.add(it+1)
}
while(!queue2.isEmpty()) {
if(stack.empty()) {
stack.push(queue2.poll())
sb.append("+\n")
//bw.write("+\n")
}
else if(queue.peek() != stack.peek()) {
stack.push(queue2.poll())
sb.append("+\n")
//bw.write("+\n")
}else{
queue.poll()
stack.pop()
sb.append("-\n")
//bw.write("-\n")
}
}
while(!stack.isEmpty()) {
if(stack.pop() != queue.poll()){
println("NO")
return
}
else sb.append("-\n")
}
print(sb)
// bw.flush()
// bw.close()
}