본문 바로가기

알고리즘/백준

백준 1111 IQ Test(Java)

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

 

1111번: IQ Test

다음 수를 출력한다. 만약 다음 수가 여러 개일 경우에는 A를 출력하고, 다음 수를 구할 수 없는 경우에는 B를 출력한다.

www.acmicpc.net

 

내 아이큐를 테스트하는 것 같은 문제..

 

arr[i+1] - arr[i]를 arr[i] - arr[i-1] 로 나누면 a를 구할 수 있다. 점화식을 세워보면 금방 알 수 있당

 

a를 구하면 b를 구하는 건 껌이다.

 

A를 출력해야하는 상황과 B를 출력해야하는 상황을 잘 구별하는 게 이 문제의 핵심이다.

 

둘 모두 "주어진 배열의 다음 숫자"에 대한 것임을 명심하자! 

 

만약 배열의 크기가 1이라면 그 다음에 어떤 숫자든 올 수 있다. --> A

예를 들어서 [3] << 이렇게 덩그러니 있으면 그 다음에 뭐가 오든 규칙위배가 아니다. 

 

배열의 크기가 2이고 arr[0]과 arr[1]이 같다면 그 다음에는 반드시 같은 숫자가 와야한다 --> 그 숫자 출력

                           arr[0]과 arr[1]이 다르다면 그 다음에 어떤 숫자든 올 수 있다. --> A

 

정해진 규칙에서 벗어난 숫자를 포함한 Arr라면 B를 출력한다. 

 

여러 가지 경우를 생각하다보니 잘 풀려서 기분이 좋다!

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

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int n = Integer.parseInt(st.nextToken());
        int[] arr = new int[n];

        st = new StringTokenizer(br.readLine());
        for (int i = 0; i < n; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }

        if (n == 1 || (n == 2 && arr[0] != arr[1])) {
            bw.write("A");
        } else if (n == 2) {
            bw.write(arr[0] + "");
        } else {
            int a, b;
            if (arr[1] == arr[0]) {
                a = 1;
                b = 0;
            } else {
                a = (arr[2] - arr[1]) / (arr[1] - arr[0]);
                b = arr[1] - (arr[0] * a);
            }

            // validate
            int i = 1;
            for (; i < n; i++) {
                if (arr[i] != (arr[i - 1] * a + b))
                    break;
            }
            if (i != n) {
                bw.write("B");
            } else {
                bw.write((arr[n - 1] * a + b) + "");
            }
        }

        bw.flush();
    }
}

 

 

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

백준 1219 오민식의 고민(Java)  (0) 2020.10.03
백준 9661 : 돌 게임 7  (0) 2020.10.02
백준 16946 벽 부수고 이동하기4(JAVA)  (0) 2020.09.30
백준 14867 물통(JAVA)  (0) 2020.09.22
백준 1377 버블 소트  (0) 2020.09.21