#1 알고리즘
배열을 실제로 뒤집거나, 원소를 삭제하는 연산은 높은 처리 시간을 요구한다. 따라서 배열을 실제로 뒤집는 대신 reversed = !reversed 연산으로 대체한다. 그리고 원소를 삭제하는 대신 reversed == false라면 startIndex++, reversed == true라면 endIndex--를 수행한다.
#2 코드 - 코틀린
lateinit var p: Array<Char>
var n: Int = -1
lateinit var array: Array<Int>
fun main() {
val t = readln().toInt()
for (i: Int in 0..<t) {
p = readCharArray()
n = readln().toInt()
array = readIntArray()
println(solve())
}
}
fun solve(): String {
var startIndex = 0
var endIndex = n - 1
var reversed = false
for (i: Int in p.indices) {
if (p[i] == 'R') {
reversed = !reversed
} else { // p[i] == 'D'
if (endIndex < startIndex) { // 배열이 비어있는데 D를 사용한 경우
return "error"
} else {
if (!reversed) {
startIndex++
} else {
endIndex--
}
}
}
}
return makeSubString(startIndex, endIndex, reversed)
}
fun readCharArray(): Array<Char> {
val inputted = readln()
val submit: Array<Char> = Array(inputted.length) { ' ' }
for (i: Int in inputted.indices) {
submit[i] = inputted[i]
}
return submit
}
fun readIntArray(): Array<Int> {
val inputted = readln()
if (inputted == "[]") {
return Array(0) { 0 }
}
val sliced = inputted.substring(1, inputted.length - 1).split(",")
val submit: Array<Int> = Array(sliced.size) { 0 }
for (i: Int in sliced.indices) {
submit[i] = sliced[i].toInt()
}
return submit
}
fun makeSubString(startIndex: Int, endIndex: Int, reversed: Boolean): String {
val submit = StringBuilder()
if (!reversed) { // reserved == false
for (i: Int in startIndex..endIndex) {
submit.append("${array[i]},")
}
} else { // reserved == true
for (i: Int in endIndex downTo startIndex) {
submit.append("${array[i]},")
}
}
return if (submit.isEmpty()) {
"[]"
} else {
"[${submit.substring(0, submit.length - 1)}]"
}
}
'문제 풀이 > 기타' 카테고리의 다른 글
[백준] 30804 (과일 탕후루) (0) | 2024.06.20 |
---|---|
[백준] 1764 (듣보잡) (0) | 2024.06.10 |
[백준] 2630 (색종이 만들기) (0) | 2024.03.04 |
[백준] 21736 (헌내기는 친구가 필요해) (0) | 2024.03.02 |
[백준] 1074 (Z) (0) | 2024.03.01 |