임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
n | return |
---|---|
121 | 144 |
3 | -1 |
정수 n이 제곱이면 n의 제곱근+1
의 제곱을 반환한다.
만약 제곱이 아니라면 -1을 반환한다.
121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144를 반환한다.
제곱에 관련된 메서드를 활용해보자.
function solution(n) {
var answer = 0;
let sqrt = Math.sqrt(n);
if (sqrt % 1 !== 0) { // 나머지를 이용해 소숫점 판별, 제곱근이 아닐 경우
answer = -1;
} else {
answer = Math.pow(sqrt+1,2); // 제곱근일 경우
}
return answer
}
메서드를 활용하면 간단한 if문으로 해결할 수 있는 문제다.
가독성을 높이기 위해 삼항연산자를 사용해 풀어보았다.
function solution(n) {
// 삼항 연산자를 이용한 풀이
return Math.sqrt(n) % 1 == 0 ? Math.pow(Math.sqrt(n)+1,2) : -1
}
삼항연산자를 사용하면 코드가 눈에 띄게 줄어들어 깔끔하게 보여지는 것을 확인할 수 있다.
무조건 코드를 간결하게 쓴다고 좋은 코드일 순 없다라고 한다. 나는 코드를 무조건 짧고 간결하게 적기 보단 누구나 이해하기 쉬운 가독성이며, 의도가 명확하고, 성능적으로 좋아야 좋은 코드라고 생각한다. 앞으로도 좋은 코드에 대해 깊이 고민하기 위해 여러가지의 코드를 보면서 공부하자!
알고리즘은 정해진 답이 없다!