본문 바로가기

백준/JAVA

[Baekjoon/JAVA] 1731번 - 추론

[백준] Baekjoon Online Judge

문제로 이동

 

문제

등차가 정수인 등차수열 (어떤 수에 차례대로 일정한 수를 더해서 이루어지는 수열) 은 2개의 숫자로 나타낼 수 있다. P는 수열의 첫 번째 수이고, Q는 그 다음수가 되기 위해 바로 전의 수에 더해야 하는 수이다. 예를 들어 P=1, Q=2 이면 그 등차수열은 1, 3, 5, 7, ..... 이 된다.

등비가 정수인 등비수열 (어떤 수에서 시작해 차례로 같은 수를 곱하여 만든 수열) 은 등차수열과 비슷하게 2개의 숫자로 나타낼 수 있다. P는 수열의 첫 번째 수이고, Q는 그 다음수가 되기 위해 바로 전의 수에 곱해야 하는 수이다. 예를 들어 P=3, Q=2이면 그 등비수열은 3, 6, 12, ...이 된다.

테디는 세상에서 수학을 제일 좋아해서 매일같이 이 수열이 등차수열인지 등비수열인지 정한다음에 다음 수를 구한다.

어떤 수열이 주어졌을 때, 그 수열의 규칙이 등차수열인지, 등비수열인지 결정한 후에, 다음에 등장할 수를 구하는 프로그램을 작성하시오.

 

입력

첫째 줄에 수열의 길이 N이 주어진다. 둘째 줄부터 N개의 줄에 수열의 각 원소가 차례대로 주어진다. 주어지는 수열은 등차수열이나 등비수열 중에 하나다. N은 항상 3 이상 50이하이며, 입력되는 수는 106 이하의 자연수이다.

 

출력

첫째 줄에 수열의 다음 원소를 출력한다. 이 수는 20억보다 작거나 같은 자연수이다.

 


예제 입력 예제 출력
4
364
843
1322
1801
2280
8
394
1172
1950
2728
3506
4284
5062
5840
6618
5
13
117
1053
9477
85293
767637
4
22
220
2200
22000
220000
3
250000
500000
1000000
2000000

풀이

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        int N = in.nextInt(); // 수열의 길이
        int arr[] = new int[N]; // 수열의 원소

        for (int i = 0; i < N; i++)
            arr[i] = in.nextInt();

        int n1 = arr[1] - arr[0]; // 다음수가 되기 위해 바로 전의 수에 더해야 하는 수
        int n2 = arr[1] / arr[0]; // 다음수가 되기 위해 바로 전의 수에 곱해야 하는 수

        // 수열의 다음 원소를 출력
        if (n1 == (arr[2] - arr[1]))
            System.out.println(arr[N - 1] + n1);
        else
            System.out.println(arr[N - 1] * n2);
    }
}

우선 N(수열의 길이)와 수열의 원소들을 입력 받았다. 그 후 첫번째와 두 번째 원소를 빼거나 나눠서 이 수열이 등비/등차수열일 때 더하거나 곱해야하는 수(n1, n2)를 구했다.

입력되는 수열은 무조건 등차수열이나 등비수열 둘 중 하나이기에 if문으로 등차수열 여부만 확인하고, 이에 해당하지 않는다면 else문이 작동하게끔 했다. 이때 등차수열에서 다음수가 되기 위해 더해야 하는 수의 크기가 같다는 점을 이용해 n1과 다른 두 원소들의 차를 비교했다.

'백준 > JAVA' 카테고리의 다른 글

[Baekjoon/JAVA] 1924번 - 2007년  (0) 2023.01.24
[Baekjoon/JAVA] 1855번 - 암호  (0) 2023.01.23
[Baekjoon/JAVA] 1718번 - 암호  (1) 2023.01.21
[Baekjoon/JAVA] 1681번 - 줄 세우기  (0) 2023.01.20
[Baekjoon/JAVA] 1673번 - 치킨 쿠폰  (0) 2023.01.19