알고리즘 문제 풀기

<릿코드> 6. ZigZag Conversion

studying develop 2020. 12. 24. 02:30
class Solution {
    func convert(_ s: String, _ numRows: Int) -> String {
        var arr = [[Character?]](repeating: Array(repeating: nil, count: 1001), count: 1001)
        let str = Array(s)
        
        
        var row = 0
        var col = 0
        
        var phase: Phase = .down
        for ch in str {
            if row == 0 {
                phase = .down
            } else if row == numRows - 1 {
                phase = .up
            }
            
            arr[row][col] = ch
            
            if phase == .down {
                row += 1
            } else {
                row -= 1
                col += 1
            }
        }
        
        var strNew = ""
        
        for i in 0...str.count {
            for j in 0...str.count {
                if let ch = arr[i][j] {
                    strNew += String(ch)
                }
            }
        }
        
        enum Phase {
            case down
            case up
        }
        
        return strNew
    }
}

시뮬레이션 느낌으로 푸는 방법 외에는 잘 모르겠다.

음 너무 노가다틱해서 다시 생각해 봐야겠다.