코딩테스트/백준

[백준]2635번 수 이어가기 - Java

GAEBAL 2022. 3. 1. 23:31
728x90

문제

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

 

2635번: 수 이어가기

첫 번째 수가 주어진다. 이 수는 30,000 보다 같거나 작은 양의 정수이다.

www.acmicpc.net

 

풀이

문제를 그대로 따라가면서 풀었음

주어지는 수까지 반복문을 돌면서 그 안에서 while(true){ }문 안에서 로직을 수행함

주어지는 수를 연산하면서 나오는 값으로 연산하기 위한 수를 최신화 해줌(0보다 작아질 때까지 반복하기 때문에 wihle(true){ }문 사용)

count 를 이용해서 숫자의 개수를 세고 max를 이용해서 최대인 count를 저장함

count가 max가 될 때의 인덱스 i를 answer에 저장한 후,

for문을 다 돌고 i일 때로 로직을 수행하는 결과를 StringBuilder에 저장하여 출력

 

코드

// 2635번 수 이어가기
// https://www.acmicpc.net/problem/2635

package BAEKJOON;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Num2635_수이어가기 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int max = Integer.MIN_VALUE;
        int count = 2;
        int answer = 0;

        for (int i = 1; i <= N; i++) {
            int a = N;
            int b = i;

            while (true) {
                int temp = solution(a, b);

                if (temp >= 0) {
                    count++;
                } else {
                    break;
                }

                a = b;
                b = temp;

            }

            if (max < count) {
                max = count;
                answer = i;
            }
            count = 2;
        }

        int a = N;
        int b = answer;

        StringBuilder sb = new StringBuilder();
        sb.append(max).append("\n");
        sb.append(N).append(" ").append(answer).append(" ");

        while (true) {
            int temp = solution(a, b);

            if (temp >= 0) {
                sb.append(temp).append(" ");
            }

            if (temp < 0) {
                break;
            }

            a = b;
            b = temp;
        }

        sb.setLength(sb.length() - 1);
        System.out.println(sb);
    }

    public static int solution(int a, int b) {
        return a - b;
    }
}
728x90