[C#] 정수 제곱근 판별
2020. 7. 27. 15:44ㆍ[C#] 코딩테스트 문제풀이
반응형
프로그래머스 문제
문제 설명
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
제한 사항
- n은 1이상, 50000000000000 이하인 양의 정수입니다.
내풀이
public class Solution {
public long solution(long n) {
long answer = 0;
for(long i=1; i<=n; i++)
{
if(i*i==n)
{
answer =(i+1)*(i+1);
break;
}
else if(i*i>=n)
{
break;
}
}
if(answer ==0)
{
answer =-1;
}
return answer;
}
}
느낀점: 간단하게 풀었지만 좋은 정답이 아닌 것 같다.
효율성을 높히기 위해 for문 중간에 else if 문으로 i 제곱이 n을 넘어서는 순간 break;를 걸어 for 문이 끝까지 도는 것만 막아주었다.
다른사람의 풀이
using System;
public class Solution {
public long solution(long n) {
long x = (long)Math.Sqrt(n);
return (x*x == n) ? (x+1)*(x+1) : -1;
}
}
깨달은 점: 다른 사람의 풀이를 보고 깨달은점은 역시 제곱근을 구해주는 간단한 함수식이 존재하였다는 것이다.
using System; -> long x를 (long)Math.sqrt(n) -> long n 의 제곱근 long x
삼항 연산자 return (x*x==n) 인가 true면 (x+1)*(x+1)을 출력 하여라 false면 -1을 출력 하여라.
Math.sqrt(n)이 정수가 아닐수도 있으니 (long)형으로 한번더 형변환을 하여주면 x*x 에서 만약 정수형으로 형변환이 되었던 수라면
-1로 예외처리가 되니 정말 깔끔한 코드 같다. 제곱근 연산자 와 깔끔한 삼항 연산자 사용법 모두 배우는 좋은 코드인것같다.
반응형
'[C#] 코딩테스트 문제풀이' 카테고리의 다른 글
[C#]자릿수 더하기 (0) | 2020.07.27 |
---|---|
[C#]정수 내림차순으로 배치하기 (0) | 2020.07.27 |
[C#] 제일 작은 수 제거하기 (0) | 2020.07.25 |
[C#] 짝수와 홀수 (0) | 2020.07.25 |
[C#] 최대공약수 최대공배수 구하기 문제(유클리드 호제법) (0) | 2020.07.25 |