[Swift 알고리즘] [1차] 비밀지도

장주명·2021년 5월 11일
0

https://programmers.co.kr/learn/courses/30/lessons/17681

나의 풀이

import Foundation

func solution(_ n:Int, _ arr1:[Int], _ arr2:[Int]) -> [String] {

    func makseBinary(_ array : [Int]) -> [String] {
        var binary = [String]()
        for i in array {
            let binaryNum = String(i,radix: 2)
            binary.append(binaryNum)
        }

        for i in 0..<binary.count {
            if binary[i].count < n {
                while binary[i].count != n {
                    let index = binary[i].index(binary[i].startIndex, offsetBy: 0)
                    binary[i].insert("0", at: index)
                }
            }
        }

        return binary
    }

    let binaryArr1 = makseBinary(arr1)
    let binaryArr2 = makseBinary(arr2)

    func makeMap(_ Array1 : [String], _ Array2 : [String]) -> [String] {

        var map = [String]()

        for i in 0..<Array1.count {
            var answer = ""
            let a1 = Array1[i].map {$0}
            let a2 = Array2[i].map {$0}

            for i in 0..<a1.count {
                if a1[i] == a2[i] {
                    if a1[i] == "0" {
                        answer += " "
                    } else {
                        answer += "#"
                    }
                } else {
                    answer += "#"
                }

            }
            map.append(answer)
        }
        return map
    }

    return makeMap(binaryArr1, binaryArr2)
}


인상적인 풀이

func solution(_ n:Int, _ arr1:[Int], _ arr2:[Int]) -> [String] {
    var answer: [String] = []
    for i in 0..<n{
        var data = UInt16(arr1[i]) | UInt16(arr2[i])
        answer.append("")
        for _ in 0..<n{
            if data & 0b00000001 == 1{
                answer[i] = "#" + answer[i]
            }else{
                answer[i] = " " + answer[i]
            }
            data = data >> 1
        }
    }
    return answer
}
  1. 이걸 한줄에 적었다는게 너무 신기했다....
func solution(_ n:Int, _ arr1:[Int], _ arr2:[Int]) -> [String] {
    return (0..<n).map { String(String(arr1[$0]|arr2[$0]|2<<(n - 1), radix: 2).map { $0 == "1" ? "#" : " " }[1...n]) }
}
profile
flutter & ios 개발자

0개의 댓글