티스토리 뷰

💻C언어 코드 바로보기

💻JAVA 코드 바로보기

 

 

문제 설명

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


제한사항

  • n은 1이상, 50000000000000 이하인 양의 정수입니다.

입출력 예

n return
121 144
3 -1

 


🌼C언어 알고리즘

 

초기화면

풀이 과정

처음에는 매개변수 n의 값을 제곱근화 시켰을 때,
'그 값이 온전한 정수이면 n은 제곱값이다' 라는 방식으로 풀려 했으나

온전한 정수를 찾는 방법이 꽤나 복잡했다..
그래서 그냥 (int)로 형변환 했을 때의 제곱근값과 double타입의 제곱근값이 같다면 그 값이 정수라는 뜻이므로

 if((int)sqrt(n)==sqrt(n)) 조건문을 사용했다.

 

 

 

완성 코드

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <math.h>

long long solution(long long n) {
    long long answer = 0;
    
    if((int)sqrt(n)==sqrt(n)) answer = pow(sqrt(n)+1,2);
    else answer = -1;

    return answer;
}

 

 

 

코드 분석

단계 과정
변수 결과에 따라 (x+1)*(x+1)이나 -1을 저장할 변수 answer
제곱값 판별 어떠한 수의 제곱근값을 봤을 때, 완전한 정수이면 그 값은 제곱근값(x)의 제곱이라는 것을 의미한다.
따라서 sqrt(n)과 (int)sqrt(n)의 값이 같다면 완전한 정수라는 뜻이므로
answer에 x+1의 제곱을 할당하고,
아니라면 -1을 할당한다. 

 

 

채점 결과

 


 

🌼JAVA 알고리즘

 

초기화면

 

 

 

설명

뭣모르고 위의 C언어 코드와 동일하게 짰다가
형변환 에러가 발생했다. (double 형을 long형(answer)으로 변환하는 과정에서 값을 잃을 수 있다 ..)

그래서 double to long 메소드를 사용하였다.

🔗 Double to Long

 

 

 

 

완성 코드

class Solution {
    public long solution(long n) {
        long answer = 0;
        
        if((int)Math.sqrt(n)==Math.sqrt(n)) answer = (new Double(Math.pow(Math.sqrt(n)+1,2))).longValue();
        else answer = -1;
        
        return answer;
    }
}

 

 

코드 분석

단계 과정
변수 결과에 따라 (x+1)*(x+1)이나 -1을 저장할 변수 answer
제곱값 판별 어떠한 수의 제곱근값을 봤을 때, 완전한 정수이면 그 값은 제곱근값(x)의 제곱이라는 것을 의미한다.
따라서 sqrt(n)과 (int)sqrt(n)의 값이 같다면 완전한 정수라는 뜻이므로
answer에 x+1의 제곱을 할당하고,
아니라면 -1을 할당한다. 

이때 long형 answer에 double형 결과를 대입하면 형변환 오류가 발생하므로,
new Double을 사용한다.

 

 

 

채점 결과

 

 


링크

 

코딩테스트 연습 - 정수 제곱근 판별

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

programmers.co.kr

 

 

About Me

💻GitHub/KimSky904 KimSky904 - Overview Department of New Media Software. KimSky904 has 8 repositories available. Follow their code on GitHub. github.com

code-review.tistory.com

 

댓글