알고리즘/[ Baekjoon ]

[ BOJ ][JAVA][1484] 다이어트

kim.svadoz 2021. 11. 2. 16:25
728x90
반응형

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

 

1484번: 다이어트

성원이는 다이어트를 시도중이다. 성원이는 정말 정말 무겁기 때문에, 저울이 부셔졌다. 성원이의 힘겨운 다이어트 시도를 보고만 있던 엔토피아는 성원이에게 새로운 저울을 선물해 주었다.

www.acmicpc.net

시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
2 초 128 MB 3273 1239 976 35.362%

문제

성원이는 다이어트를 시도중이다. 성원이는 정말 정말 무겁기 때문에, 저울이 부셔졌다. 성원이의 힘겨운 다이어트 시도를 보고만 있던 엔토피아는 성원이에게 새로운 저울을 선물해 주었다. 성원이는 엔토피아가 선물해준 저울 위에 올라갔다. “안돼!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! G 킬로그램이나 더 쪘어ㅜㅠ”라고 성원이가 말했다. 여기서 말하는 G킬로그램은 성원이의 현재 몸무게의 제곱에서 성원이가 기억하고 있던 몸무게의 제곱을 뺀 것이다.

성원이의 현재 몸무게로 가능한 것을 모두 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 G가 주어진다. G는 100,000보다 작거나 같은 자연수이다.

출력

첫째 줄부터 한 줄에 하나씩 가능한 성원이의 현재 몸무게를 오름차순으로 출력한다. 가능한 몸무게가 없을 때는 -1을 출력한다. 현재 몸무게는 자연수로 떨어지지 않을 수도 있는데, 이런 경우는 제외해야 한다.

예제 입력 1

15

예제 출력 1

4
8

접근

수식을 써보니 (A + B)(A - B)의 형태가 만들어지는 것을 확인했고 그대로 구현했다.

코드

/**
 * BOJ 1484 다이어트
 * 수학
 */
import java.io.*;
import java.util.*;

public class p1484 {
    static int g;
    static List<Integer> list;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        g = Integer.parseInt(br.readLine());

        list = new ArrayList<>();
        // g: 15
        // 15킬로그램이나 쪘어!!!
        // 현재몸무게 cur^2 - 기억^2 = 15
        // (a + b)(a - b) = 15
        // 4 + 1 * 4 - 1
        // 8 + 7 * 8 - 7
        for (int i = 1; i <= g; i++) {
            // 현재 몸무게 테스트
            if (g % i != 0) continue;

            // 더해서 i가 만들어지는 경우를 본다
            for (int j = 1; j <= i / 2; j++) {
                int a = j;
                int b = i - j;

                int big = Math.max(a, b);
                int small = Math.min(a, b);
                if ((big + small) * (big - small) == g) {
                    list.add(big);
                }
            }
        }
        if (list.size() == 0) {
            System.out.println(-1);
        } else {
            Collections.sort(list);
            for (int i = 0; i < list.size(); i++) {
                System.out.println(list.get(i));
            }
        }
    }
}
728x90
반응형

'알고리즘 > [ Baekjoon ]' 카테고리의 다른 글

[ BOJ ][JAVA][3190] 뱀  (0) 2021.11.02
[ BOJ ][JAVA][1504] 특정한 최단경로  (0) 2021.11.02
[ BOJ ][JAVA][16953] A -> B  (0) 2021.11.02
[ BOJ ][JAVA][6159] 코스튬 파티  (0) 2021.11.01
[ BOJ ][JAVA][16943] 숫자 재배치  (0) 2021.10.28