ALGORITHM/프로그래머스 | 백준 | 삼성 | 카카오

[SWEA] 6782. 현주가 좋아하는 제곱근 놀이

SZCODE 2020. 5. 17. 23:34

https://swexpertacademy.com/main/code/problem/problemDetail.do

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

문제 설명 :
어느 날 현주는 제곱근 놀이를 만들기로 했는데, 룰은 다음과 같다.
- 2이상의 어떤 정수 N이 있다.
- N을 N+1로 바꿀 수 있다.
이 정수일 때, N을 으로 바꿀 수 있다.
게임의 목표는 N을 2로 만드는 것이다.

N을 2로 만들기 위해 조작해야 하는 횟수의 최솟값을 구하는 프로그램을 작성하라.

import java.util.Scanner;

public class Solution {
	public static void main(String[] args) {
		long T;
		double N;
		Scanner sc = new Scanner(System.in);
		T = sc.nextInt();
		for (int tc = 1; tc <= T; tc++) {
			N = sc.nextLong();
			long count = 0;

			while (N != 2) {// 2가아닐때까지
				// 1. 루트 앤이 정수인지 아닌지 판단하기
				double p = Math.sqrt(N);
				if ((long) p == p) {
					count++;
					N = p;
				} else {// 루트 정수가 아닐때
					
				 long a = (long) (Math.sqrt(N)+1);
				 long b = a*a;
				 count = (long) (b-N)+count;
				 N = b;
				}
			}

			System.out.println("#" + tc + " " + count);

		}
	}
}