본문 바로가기

Codeup

Java) codeup 1282 : 제곱수 만들기

1282 : 제곱수 만들기 해결

시간 제한: 1 Sec  메모리 제한: 128 MB

제출: 11777  해결 문제 수: 4854

소스 제출 채점 상황 게시판

문제 분류 : 보기

문제 설명    내 문제집에 추가 풀이1(C/C++) 내소스1

nn이 입력되면 kk를 빼서 제곱수를 만들 수 있는 kk를 구하고,

그 제곱수에 루트를 씌운 수(제곱근) tt를 구하여라.

이 때 k는 여러가지가 될 수 있는데 가장 작은 k를 출력한다.

입력

nn이 입력된다.(0<k<n<=2310<k<n<=231)

출력

kk tt를 출력한다. 이 때 kk는 여러가지가 될 수 있는데 가장 작은 kk를 출력한다.

입력 예시   예시 복사

34

출력 예시

9 5

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.util.Scanner;
public class Main {
 
    public static void main(String[] args) {
        int a, cnt =0;
        Scanner sc = new Scanner(System.in);
        a = sc.nextInt();
        for(int i = 1;i<a;i++) {
            if((int)Math.sqrt(a-i) == Math.sqrt(a-i)) {
                System.out.printf("%d %.0f", i, Math.sqrt(a-i));
                break;
            }
        }
    }
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

문제 해결 방법 : 이 문제는 생각을 해야하는 문제였다. 이 문제를 보고 이중 포문을 사용하여 만들었는데 시간 초과가 나왔다. 그래서 for문 하나로 구현하였다. for문을 하나만 이용하는 것과 또 제곱근을 어떻게 파악하는지가 중요한 문제 였다. 내가 제곱근이 정수인지 판별하는 것은 제곱근을 (int)로 바꾼 것과 결과로 나온 제곱근이 같으면 정수 이기 때문에 풀 수 있었다.