Swift | programmers/Lv1.

[Swift]Lv.1 정수 제곱근 판별

iOSDEv 2024. 2. 23. 10:35
정수 제곱근 판별



문제

나의 풀이

 

sqrt 제곱근 함수를 사용해서 풀었다

 

 

다른 사람의 풀이

 

extension Int64 {
    func bitCount() -> Int {
        let hexString = String(self, radix: 2, uppercase: false)
        return hexString.count
    }
}

func solution(_ n:Int64) -> Int64 {
    let sqrtBitCount: Int = (n.bitCount() + 1) / 2
    let min, max: Int64
    min = 1 << Int(sqrtBitCount - 1)
    max = 1 << sqrtBitCount

    for i in min..<max {
        if i * i == n {
            return (i + 1) * (i + 1)
        } else if i * i > n {
            break
        }
    }

    return -1
}

 

2진수로 변환한 후 비트에 1을 더하고 2를 나눈 후 결과를 저장한다

그리고 min, max 비트 단위 왼쪽 시프트(<<)를 사용해서

최솟값은 1을 잡고 sqrtBitcount - 1 만큼 왼쪽으로 옮기는 것이고 

최댓값은 1을 잡고 sqrtBitcount 만큼 왼쪽으로 옮긴다

 

그렇게 min - max 범위까지 반복해서 제곱근이 n과 같은지 판별하고 만약 n보다 크다면 반복문을 종료

 

 

여기서 내가 처음 보는 것들이 있어서 정리하고자 한다

let binaryString = String(10, radix: 2, uppercase: false)
print(binaryString)  // 출력: "1010"

//10을 2진수로 변환하여 문자열 1010을 생성한다
//Int64 -> 정수2진수 문자열로 변환하고 그 문자열의 길이를 반환하여 해당 정수의 비트 수를 계산하는데 활용

 

String(10진수, radix: 진수, uppercase: 문자열 대문자 소문자 여부)

  • 10 : 현재 인스턴스 (메소드가 호출된 인스턴스) 나타냄 원 숫자
  • radix : 변경할 진수 만약 2이면 2진수 8이면 8진수를 변경할것이라고 생각하면된다
  • uppercase : 문자열로 반환하기 때문에 대문자로 변환할것인지 아닌지에 대해서 작성한다

func solution(_ n:Int64) -> Int64 {
    let doubleValue: Double = Double(n).squareRoot()
    var intValue: Int = Int(doubleValue)
    if (Double(intValue) == doubleValue) {
        intValue += 1
        return Int64(intValue*intValue)
    } else {
        return -1  
    }
}

squareRoot()에 대해서 처음 들어봤기에 정리하고자 한다

 

  • squareRoot란?
    • 부동 소수점 수에 대해 제곱근을 계산하게된다 (sqrt와 똑같다고 생각)

 

func solution(_ n:Int64) -> Int64 {   
    var count: Int64 = 0
    var ans: Int64 = 0
    while count * count < n {
        count += 1
    }

    if count * count == n {
        ans = (count + 1) * (count + 1)
    } else {
        ans = -1
    }

    return ans
}

 

 

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr