본문 바로가기

Algorithm의 모든것

[Algorithm의 모든것] (Swift)프로그래머스-정수 제곱근 판별

문제

프로그래머스의 [정수 제곱근 판별] 문제

코드 보기
더보기
내풀이
import Foundation

func solution(_ n:Int64) -> Int64 {
    return sqrt(Double(n)) - floor(sqrt(Double(n))) > 0 ? -1 : Int64(pow(sqrt(Double(n))+1, 2))
}
다른 사람의 풀이
import Foundation

func solution(_ n:Int64) -> Int64 {
    let t = Int64(sqrt(Double(n)))
    return t * t == n ? (t+1)*(t+1) : -1
}

느낀점

이번 문제를 통해서 Foundation 프레임워크의 제곱(pow) 함수와 제곱근(sqrt) 함수 그리고 버림(floor) 함수를 알게 됐습니다.
문제는 위 두 함수를 사용하면 간단하게 해결됩니다.
요새 삼항연산자에 재미를 들려 ... 가독성엔 그리 좋지 않지만 삼항연산자로 코드 수를 줄여봤고 함수를 사용하여 별다른 로직이 들어가지 않습니다.

로직을 간단히 설명드리자면 제곱근을 구했을 때에 나오는 값정수 부분을 뺄셈했을 때 0보다 크면, 즉 소수 자리 숫자가 있으면 -1을 출력하고 아니라면 제곱근을 출력하는 로직입니다.

//제곱근을 구했을 때에 나오는 값
sqrt(Double(n))

//위 값의 정수부분
floor(sqrt(Double(n)))

 

이상으로 프로그래머스의 제곱근 판별 문제를 마치도록 하겠습니다.
감사합니다:)