백준(BOJ) 1111 IQ Test 파이썬(Python)

문제 링크

간단한 수학 문제.
ax + b = y 꼴의 방정식을 2개 연립해서 해를 구하면 된다.
다만, 예외 케이스가 몇 가지 있다.
주어진 방정식이 부정인 경우(답을 알 수 없는 경우)에는 'A', 불능인 경우(답이 없는 경우) 'B'를 출력해야 한다.
첫째로, n==1일 때는 항상 부정이다.
둘째로, n==2일 때는 두 수가 같은 경우를 제외하고는 부정이다.
n>=3인 경우에는 ZeroDivisionError인 경우를 제외하고는 연립방정식을 세워 해결하면 된다.
ZeroDivisionError인 경우에는 첫 두 수가 같은 경우이므로 이후 수들이 같은지 확인하면 된다.

from itertools import pairwise

n = int(input())
arr = list(map(int, input().split()))

if n == 1:
    # n == 1인 경우
    print('A')
elif n == 2:
    # n == 2인 경우
    if arr[0] == arr[1]:
        print(arr[0])
    else:
        print('A')
elif arr[0] == arr[1]:
    # n >= 3이면서 연립방정식을 세우면 ZeroDivisionError가 발생하는 경우
    for e in arr:
        if e != arr[1]:
            print('B')
            break
    else:
        print(arr[0])
else:
    # n >= 3이면서 연립방정식을 세워서 해결할 수 있는 경우
    a = (arr[1] - arr[2]) / (arr[0] - arr[1])
    if int(a) != a:
        print('B')
    else:
        b = arr[1] - a * arr[0]
        for f, s in pairwise(arr):
            if a * f + b != s:
                print('B')
                break
        else:
            print(int(a * arr[-1] + b))

2024

맨 위로 이동 ↑

2023

세그먼트 트리

개요 선형적인 자료구조에서는 값에 접근하는 데에 \(O(1)\)이면 충분하지만, 대신 부분합을 구하는 데에는 \(O(N)\)이 필요하다. 그렇다면 이 자료구조를 이진 트리로 구성하면 어떨까? 값에 접근하는 데에 걸리는 시간이 \(O(\lg N)\)으로 늘어나지만 대신 부분합을 구하...

벨만-포드 알고리즘

개요 다익스트라 알고리즘과 함께 Single Sourse Shortest Path(SSSP) 문제를 푸는 알고리즘이다. 즉, 한 노드에서 다른 모든 노드로 가는 최단 경로를 구하는 알고리즘이다. 다익스트라 알고리즘보다 느리지만, 음수 가중치 간선이 있어도 작동하며, 음수 가중치 사...

다익스트라 알고리즘

개요 다익스트라 알고리즘은 Single Sourse Shortest Path(SSSP) 문제를 푸는 알고리즘 중 하나이다. 즉, 한 노드에서 다른 모든 노드로 가는 최단 경로를 구하는 알고리즘이다. 단, 다익스트라 알고리즘은 음수 가중치 엣지를 허용하지 않는다. 이 경우에는 벨만-...

맨 위로 이동 ↑