넘치게 채우기

[BOJ] 1111 - IQ Test 본문

PS/BOJ

[BOJ] 1111 - IQ Test

riveroverflow 2025. 4. 2. 17:06
728x90
반응형

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

BOJ - IQ Test

문제 유형: 수학, 구현, 조건분기, 브루트 포스
문제 난이도: Gold III
시간 제한: 2초
메모리 제한: 128MB

문제

IQ Test의 문제 중에는 공통된 패턴을 찾는 문제가 있다. 수열이 주어졌을 때, 다음 수를 찾는 문제이다.
예를 들어, 1, 2, 3, 4, 5가 주어졌다. 다음 수는 무엇인가? 당연히 답은 6이다. 약간 더 어려운 문제를 보면, 3, 6, 12, 24, 48이 주어졌을 때, 다음 수는 무엇인가? 역시 답은 96이다.
이제 제일 어려운 문제를 보자.
1, 4, 13, 40이 주어졌을 때, 다음 수는 무엇일까? 답은 121이다. 그 이유는 항상 다음 수는 앞 수*3+1이기 때문이다.
은진이는 위의 3문제를 모두 풀지 못했으므로, 자동으로 풀어주는 프로그램을 작성하기로 했다. 항상 모든 답은 구하는 규칙은 앞 수*a + b이다. 그리고, a와 b는 정수이다.
수 N개가 주어졌을 때, 규칙에 맞는 다음 수를 구하는 프로그램을 작성하시오.
 

입력

첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 N개의 수가 주어진다. 이 수는 모두 절댓값이 100보다 작거나 같은 정수이다.
 

출력

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

풀이

만약 길이가 1이라면, A이다.
길이가 2라면, 두 요소가 같으면 그 요소가 다음수고, 아니라면 A이다.
 
 
이제, 브루트 포스를 했다.
-200 ~ 200의 a로 시도한다.
(저는 느낌적으로 -200 ~ 200이 괜찮겠다고 생각했는데, 아래 게시글을 참고하세요.
https://www.acmicpc.net/board/view/107405)
B= arr[1] - arr[0]*a이다.
이 b로 유효하다면, 배열의 마지막원소 *a+b를 출력하고, 적당한 a가 없으면 'B'를 출력해준다.
 
 

코드

C++

#include <bits/stdc++.h>

using namespace std;

int main(int argc, char *argv[]) {
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    int n;
    cin >> n;
    vector<int> arr(n);
    for (auto &i : arr) cin >> i;

    if (n == 1) {
        cout << "A\n";
        return 0;
    }

    if (n == 2) {
        if (arr[0] == arr[1]) {
            cout << arr[1] << "\n";
        } else {
            cout << "A\n";
        }
        return 0;
    }

    for (int a = -200; a <= 200; a++) {
        int b = arr[1] - arr[0] * a;
        bool flag = true;
        for (int i = 0; i < n - 1; i++) {
            if (arr[i] * a + b != arr[i + 1]) {
                flag = false;
                break;
            }
        }
        if (flag) {
            cout << arr.back() * a + b << "\n";
            return 0;
        }
    }

    cout << "B\n";
    return 0;
}

 

728x90
반응형

'PS > BOJ' 카테고리의 다른 글

[BOJ] 2411 - 아이템 먹기  (0) 2025.04.04
[BOJ] 1922 - 네트워크 연결  (0) 2025.04.03
[BOJ] 22238 - 가희와 btd5  (0) 2025.04.01
[BOJ] 19639 - 배틀로얄  (0) 2025.03.31
[BOJ] 23300 - 웹 브라우저 2  (0) 2025.03.30