Daily LeetCode Challenge - 6. Zigzag Conversion

Min Young Kim·2023년 2월 3일
0

algorithm

목록 보기
63/198

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) 이 된다.

profile
길을 찾는 개발자

0개의 댓글