Problem From.
https://leetcode.com/problems/zigzag-conversion/
오늘 문제는 문자열 s 가 주어질때, 그 문자열을 주어진 줄 수 대로 지그재그 형식으로 만든다음, 지그재그 문자를 위에서 부터 읽은 형식으로 반환하는 문제였다.
먼저 줄 수 만큼 배열을 만들고, 문자열 s 를 앞에서부터 차례로 읽으며, 각 줄을 나타내는 배열에 하나씩 추가해주었다. 마지막에는 그 추가한 배열을 모두 들고와서 이어 붙인다음 반환하였다.
class Solution {
fun convert(s: String, numRows: Int): String {
if(numRows == 1) return s
val words = Array(numRows) {""}
var isIncrease = true
var num = 0
for(char in s) {
words[num] = words[num] + char
when {
num == numRows - 1 && isIncrease -> {
num -= 1
isIncrease = false
}
num < numRows && isIncrease -> {
num += 1
}
num == 0 && !isIncrease -> {
num += 1
isIncrease = true
}
num > 0 && !isIncrease -> {
num -= 1
}
}
}
val answer = StringBuilder("")
words.forEach { word ->
answer.append(word)
}
return answer.toString()
}
}
위 풀이의 시간 복잡도는 O(kN) 이 된다.