[프로그래머스] 2개 이하로 다른 비트 - Swift

이창형·2023년 4월 27일
0


코드

// 규칙을 찾으면 간단한 문제입니다
// 1. 2진수로 변환시 모든 숫자가 1인경우 젤 앞에 1을 붙히고 뒷 숫자를 0으로 변환
// 2. 2진수로 변환시 젤 뒷 숫자가 0인 경우 0을 1로 변경
// 3. 1,2번 조건이 아닐때 0이 나오면 0을 1로 바꾸고 뒷 숫자를 0으로 변경
func solution(_ numbers:[Int64]) -> [Int64] {
    var numArray = [String]()
    var answer = [Int64]()
    
    func check (_ n: String) -> Int64 {
        var n = n.map{String($0)}
        var answer = Int64(0)
        // 2번 규칙
        if n.last == "0" {
            n.removeLast()
            n.append("1")
            var a = ""
            for i in n {
                a.append(i)
            }
            return Int64(a, radix: 2)!
            // 1번 규칙
        } else if !n.contains("0") {
            n[0] = "0"
            n.insert("1", at: 0)
            var a = ""
            for i in n {
                a.append(i)
            }
            return Int64(a, radix: 2)!
          	// 3번 규칙
        } else {
            for i in (0..<n.count-1).reversed() {
                if n[i] == "0" {
                    n[i] = "1"
                    n[i+1] = "0"
                    var a = ""
                    for i in n {
                        a.append(i)
                    }
                    
                    return Int64(a, radix: 2)!
                }
            }
        }

        return answer
    }
    // 모든 수를 2진수로 변환
    for i in numbers {
        numArray.append(String(i, radix:2))
    }
    
    for i in numArray {
        answer.append(check(i))
    }
    
    return answer
}

회고

  • 규칙을 찾으니 구현하기에 어렵지 않았다
  • 문제 똑바로 읽자.. input이 2개인 줄 알고 2개로 풀었다가 0점나와서 1시간을 버렸다
profile
iOS Developer

0개의 댓글