[java] 1484 다이어트

ideal dev·2023년 1월 5일
0

코딩테스트

목록 보기
38/69

1. 문제 링크 및 문제

https://www.acmicpc.net/problem/1484

2. 해결 방법 생각해보자 ...

현재몸무게 = x , 기억몸무게 = y 라고 가정했을 때 주어지는 G는

  1. G = x^2 - y^2 이므로, x 와 y 값을 바꿔가며 해당 식이 성립할 때의 값을 찾는다.
  1. 만약 x^2 - y^2 >= G 인 상황이라면 y++
    예) 현재몸무게 6, 기억몸무게 1, G 15 = 36-1 >= 15 이므로
    기억몸무게를 높여줘야 한다, y++ ;
  1. 만약 x^2 - y^2 < G 인 상황이라면 x++
    예) 현재몸무게 3, 기억몸무게 1, G 15 = 4-1 < 15 이므로
    현재몸무게를 높여줘야 한다, x++ ;
  1. 만약 x^2 - y^2 == G 인 상황이라면 x 출력
    예 ) 3의 예시를 거치면 현재몸무게 4, 기억몸무게 1, G 15 이므로, 16-1 = 15 .
    현재 몸무게를 출력한다.

💡 G가 나오는 값이 없을 경우도 있으므로, boolean 변수 flag 하나 생성
값이 한 번이상 출력 되었다면 flag = true

❓ 나는 start와 end값을 어떻게 잡아야 하나 고민했다.
단순했다... 최저 몸무게가 1 이므로 start=1 , end=2 로 시작해서
점점 늘려가면 되는 것이었다

3. 코드

import java.io.*;
import java.util.*;
 
public class Main {
 
    static int G;
 
    public static void main(String[] args) throws IOException {
 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
        G = Integer.parseInt(br.readLine());
		
		//x^2-y^2 = G^2 인 경우의 수
		int start = 1;
		int end = 2;
		boolean flag = false;

		while(end<100000){

			int startWeight = start * start;
			int endWeight = end * end;

			if(endWeight - startWeight == G){
				System.out.println(end);
				flag = true;
			}

			if(endWeight - startWeight >= G){
				start += 1;
			}else{
				end += 1;
			}
		}

		if(!flag) System.out.println(-1);

    }
}

0개의 댓글