잡초의 일지

[Swift] 프로그래머스 | 코딩테스트 연습 -> 2018 KAKAO BLIND RECRUITMENT -> [1차] 비밀지도 본문

[코딩] 문제풀기/Swift

[Swift] 프로그래머스 | 코딩테스트 연습 -> 2018 KAKAO BLIND RECRUITMENT -> [1차] 비밀지도

JabCho 2021. 2. 20. 09:02
728x90
반응형
SMALL

minsone.github.io/mac/ios/swift-advanced-operators-summary

 

[Swift]Advanced Operators 정리

고급 연산자(Advanced Operators) Swift는 더 복잡한 값 조작을 동작하는 몇가지 고급 연산자를 제공한다. 비트 관련 연산자는 C와 Objective-C와 유사하다. Swift에 산술 연산자는 기본적으로 오버플로우를

minsone.github.io

여기 있는것처럼 이진수 연산을 해서 or연산자로 풀려고 했는데,

Int를 Int8로 ..(혹은 다른것으로도) 바꾸는 방법을 찾지 못했다..

십진수를 이진수로 바꾸는 방법들은 모두 문자열을 반환했다.

따라서 마땅한 방법을 찾지 못해, 십진수를 이진수 문자열로 바꾸고, 문자열끼리 비교하기로 하였다.

업데이트 후, 바뀐 함수나 타입 등이 아직 어색하다. 

 

func solution(_ n:Int, _ arr1:[Int], _ arr2:[Int]) -> [String] {
    func pad(string : String, toSize: Int) -> String {		// 이 함수는 찾아서 사용했다.
      var padded = string
      for _ in 0..<(toSize - string.count) {
        padded = "0" + padded
      }
        return padded
    }
    
    var answer: [String] = []
    var binStr1: [String] = []
    var binStr2: [String] = []
    var res: String = ""
    
    for arr in arr1{
        binStr1.append(pad(string: String(arr, radix: 2), toSize: n))
    }
    for arr in arr2 {
        binStr2.append(pad(string: String(arr, radix: 2), toSize: n))
    }
    for i in 0..<binStr1.count {
        res = ""
        for _ in binStr1[i]{
            let a = binStr1[i][binStr1[i].startIndex]
            let b = binStr2[i][binStr2[i].startIndex]
            
            if ((a == "0") && (b == "0")) {
                res += " "        // 0
            }else{
                res += "#"        // 1
            }
            binStr1[i].remove(at: binStr1[i].startIndex)
            binStr2[i].remove(at: binStr2[i].startIndex)
        }
        answer.append(res)
    }
    return answer
}

실행시키고 보니, 시간이 오래걸렸다.

더 빠르게 실행할 수 있는 방법을 찾아봐야겠다.

728x90
반응형
LIST
Comments