유니 코드

[PGS/프로그래머스][Lv1] 정수 제곱근 판별(Kotlin) 본문

알고리즘/미분류

[PGS/프로그래머스][Lv1] 정수 제곱근 판별(Kotlin)

꼬물쥰 2022. 8. 11. 00:57

https://school.programmers.co.kr/learn/courses/30/lessons/12934

 

프로그래머스

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

programmers.co.kr


[문제설명]

임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다. n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.

[제한 사항]
  • n은 1이상, 50000000000000 이하인 양의 정수입니다.
[입출력 예]
n return
121 144
3 -1

접근방법

제곱근을 반환하는 함수인 sqrt함수를 사용했다

sqrt를 사용할 때는 import kotlin.math.sqrt를 해주어야하고, 자료형 또한 Double이나 Float로 맞춰주어야한다

입력값 n이 Long타입이기 때문에 n.toDouble()의 제곱근을 구한다

구한 제곱근에 toLong()을 해주면 소수점 아래 수는 사라지므로 (제곱근) * (제곱근) 값이 n과 달라진다는 점을 이용하자!!


코드

import kotlin.math.*
class Solution {
    fun solution(n: Long): Long {
        var answer: Long = 0
        
        var sqrt = sqrt(n.toDouble()).toLong()
        if(sqrt*sqrt==n) answer = (sqrt + 1)*(sqrt + 1)
        else answer = -1
        
        return answer
    }
}

느낀점 || 배운점

문제 읽었을 때는 금방 풀 수 있을거라고 생각했는데 생각보다 오래걸렸다...

Long타입은 잘 사용하지 않아서 헷갈리기도 했고, 처음에는 위의 방법이랑 다르게 접근했다

처음에 접근한 방식은 n의 제곱근을 구하면 4.0이나 1.5698 와 같이 나오니까 .을 기준으로 split해서

값을 비교하려고 했다. 그렇게해서 테스트케이스는 전부 통과했는데 채점하니까 절반정도 틀렸다.

될 것같은데 안되서 화가났는데 잠시 쉬다가 오니까 다른 방법이 생각나서 일단 풀었다.

하지만 split으로 다시한번 풀어봐야될것 같다. 될것같은 느낌이 든다

만약 풀게된다면 코드를 추가하겠다

 

Comments