Post

BOJ_1484_다이어트 (Java)

BOJ_1484_다이어트 (Java)

[Gold V] 다이어트 - 1484

문제 링크

성능 요약

메모리: 14428 KB, 시간: 104 ms

분류

수학, 두 포인터

제출 일자

2025년 1월 22일 19:22:13

문제 설명

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

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

입력

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

출력

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

문제 풀이

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/**
 * Author: nowalex322, Kim HyeonJae
 */

import java.io.*;
import java.util.*;

public class Main {
    static BufferedReader br;
    static BufferedWriter bw;
    static StringTokenizer st;
    static StringBuilder sb = new StringBuilder();
    int G, maxN;
    int a, b, n, m;
    static TreeSet<Integer> tset;
    public static void main(String[] args) throws Exception {
        new Main().solution();
    }

    public void solution() throws Exception {
        br = new BufferedReader(new InputStreamReader(System.in));
//        br = new BufferedReader(new InputStreamReader(new FileInputStream("src/main/java/BOJ_1484_다이어트/input.txt")));
        bw = new BufferedWriter(new OutputStreamWriter(System.out));

        G = Integer.parseInt(br.readLine());
        maxN = (G + 1) / 2;

        tset = new TreeSet<>();

        for (int i = 1; i <= (int) Math.sqrt(G); i++) {
            if (G % i == 0) {
                a = G / i;
                b = i;

                n = (a + b)/2;
                m = (a - b)/2;

                if((a + b) % 2 == 0 && (a - b) % 2 == 0) {
                    if(m > 0)
                        tset.add(n);
                }
            }
        }

        sb.append(tset.isEmpty() ? -1 : print());

        bw.write(sb.toString());
        bw.flush();
        bw.close();
        br.close();
    }

    private String print(){
        StringBuilder tmp = new StringBuilder();
        for (int n : tset) {
            tmp.append(n).append("\n");
        }
        return tmp.toString();
    }
}

This post is licensed under CC BY 4.0 by the author.