Algorithm) 정수 제곱근 판별 (프로그래머스 Level 1)
문제의 상황은 간단합니다
정수가 하나 주어지고(n 이라 하겠습니다), n이 어떤 양의 정수(x라 하겠습니다)의 제곱인지 아닌지 판단합니다.
주어진 정수 하나가 양의 정수 x 의 제곱에 해당한다면 이 x +1 의 제곱을 리턴하고,
n이 양의 정수 x의 제곱이 아니라면 -1 을 리턴하는 함수를 만드는 것입니다.
숫자를 넣어보면 간단합니다.
100 이 주어지고, 100이 어떤 양의 정수의 제곱인지 아닌지 판단합니다.
100 이 어떤 양의 정수의 제곱에 해당한다면 그 양의 정수에 1을 더한 값에 제곱을 리턴하고,
100 이 어떤 양의 정수의 제곱에 해당하지 않는다면 -1 을 리턴합니다.
100은 10의 제곱이라는걸 우리는 알고 있기 때문에, 이를 활용하여 다시 작성해봅니다.
100 이 주어지고 100은 10의 제곱입니다.
100 이 10의 제곱에 해당되기 떄문에 10에 1을 더한 값의 제곱, 즉 11의 제곱인 121을 리턴합니다.
(100에 대해서는 해당하지 않는 부분입니다)
문제에 대한 이해는 이정도면 충분할 것 같습니다.
음.. sqrt() 함수를 알았다면 좀 더 쉽게 풀었겠지만, 모르는 상태라 가정하고 풀어보겠습니다.
1. 제곱을 했을 때, 파라미터로 주어진 n과 같아야 하니 1부터 n까지 확인을 해야한다. 반복문을 사용하자.
2. 단 제곱 수가 파라미터로 주어진 n 보다 커지면 의미가 없기 때문에, break 를 활용하여 반복문을 종료한다.
3. 만약 반복문을 돌리다가 반복문의 상수 i 의 제곱이 n 과 같게 된다면 상수 i에서 +1 한 값을 두 번 곱한 값을 리턴한다.
4. 반복을 했지만 이 모든 경우의 수에 해당하지 않으면 -1 을 리턴한다.
코드는 다음과 같다.
But, sqrt() 함수를 사용하면 이를 보다 쉽게 해결할 수 있다.
sqrt 함수가 무엇일까?
쉽게 말해, 제곱근을 쉽게 구할 수 있는 함수이다.
제곱근을 설명하기에는 애매하여 찾아보시길 권한다.
sqrt 함수를 사용해 나온 결과는 다음과 같다
Right ! 어느 정도 sqrt() 함수에 대한 느낌이 잡혔다.
이를 활용하여 문제를 해결해보자.
삼항 연산자를 활용하여 코드를 줄이면서 비교적 깔끔한 코드가 완성되었다. 굿굿
Source Code 확인 : https://github.com/inswag/ExerciseAlgorithm/blob/master/niveau1.playground/Pages/정수%20제곱근%20판별.xcplaygroundpage/Contents.swift