SW 꿈나무
[Level 1][C] 정수 제곱근 판별 본문
문제
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
제한 조건
n은 1 이상, 50,000,000,000,000 이하인 양의 정수
Example
Input 1 : 121 Input 2 : 3
Output 1 : 144 Output 2 : -1
Code
#include <stdio.h> #include <stdbool.h> #include <stdlib.h> #include<math.h> long long solution(long long n) { long long answer = 0; // answer 선언 및 초기화 long long max=sqrt(50000000000000); // max 선언 및 루트 50,000,000,000,000 for(long long i=0;i<max;i++) { // 루트 50,000,000,000,000 동안 반복 if(n==i*i) { // n이 i의 제곱이라면, answer=(i+1)*(i+1); // answer = (i+1) 의 제곱 break; // 반복문 탈출 } else { // n이 i의 제곱이 아니라면, answer=-1; // answer 는 -1 } } return answer; // answer 반환 }
Other Code
#include <stdio.h> #include <stdbool.h> #include <stdlib.h> #include<math.h> long long solution(long long n) { long long answer = 0; // answer 선언 및 초기화 if((int)sqrt(n)==sqrt(n)) { // sqrt(n)의 정수형 캐스팅 값과 sqrt(n)의 값이 같으면, answer = (sqrt(n)+1)*(sqrt(n)+1); // answer 는 sqrt(n)+1 의 제곱 //answer = pow((sqrt(n))+1,2); // 위와 동일 } else { // sqrt(n)의 정수형 캐스팅 값과 sqrt(n)의 값이 다르면, answer = -1; // answer 는 -1 } return answer; // answer 반환 }
'Algorithm > Programmers' 카테고리의 다른 글
[Level 1][C] 자릿수 더하기 (0) | 2020.03.26 |
---|---|
[Level 1][C] 자연수 뒤집어 배열로 만들기 (0) | 2020.03.26 |
[Level 1][C] 짝수와 홀수 (0) | 2020.03.26 |
[Level 1][C] 핸드폰 번호 가리기 (0) | 2020.03.26 |
[Level 1][C] 하샤드 수 (0) | 2020.03.26 |
Comments