정화 코딩

[C++] IQ Test (백준 1111번) 본문

PS

[C++] IQ Test (백준 1111번)

jungh150c 2025. 4. 2. 15:57

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

 

#include <iostream>
#include <vector>
#include <set>
using namespace std;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int n;
    cin >> n;

    vector<int> arr(n);
    for (int i = 0; i < n; i++) cin >> arr[i];

    set<int> ans;
    for (int a = -200; a < 201; a++) {
        for (int b = -20000; b < 20001; b++) {
            bool psb = true;
            for (int i = 1; i < n; i++) {
                if (a * arr[i - 1] + b != arr[i]) {
                    psb = false;
                    break;
                }
            }
            if (psb) {
                ans.insert(a * arr[n - 1] + b);
            }
        }
    }

    if (ans.size() == 1) cout << *ans.begin() << '\n';
    else if (ans.size() > 2) cout << "A\n";
    else cout << "B\n";
}

무지성으로 모든 a, b 조합을 체크해서 풀었다...

처음에는 a와 b 범위 모두 -100 ~ 100으로 잡았다가 WA를 받았다. 그 후 범위가 부족함을 깨닫고 범위를 늘려줬다. 무지성으로 너무 늘리면 또 시간초과를 받게 되니 딱 리미트에 맞춰서 설정해주어야 하는 것 같다. 나는 a 범위 -200 ~ 200, b 범위 -20000  ~ 20000으로 설정해서 AC를 받았다. 

(AC)

 

범위 설정할 때 참고한 글

https://www.acmicpc.net/board/view/114710

https://www.acmicpc.net/board/view/107405

 

연립방정식을 사용하면 더 복잡하긴 하지만 시간을 많이 줄일 수 있는 것 같다. 나중에 풀어봐야겠다.

 

참고하면 도움이 될 글 

https://www.acmicpc.net/board/view/128337

 

'PS' 카테고리의 다른 글

[C++] 치킨 배달 (백준 15686번)  (0) 2025.04.04
[C++] 반복수열 (백준 2331번)  (0) 2025.04.04
[C++] 1 빼기 (백준 25709번)  (0) 2025.04.02
[C++] 사전 순 최대 공통 부분 수열  (0) 2025.03.30
[C++] △ (백준 27966번)  (0) 2025.03.26
Comments