본문 바로가기

알고리즘/🥇 골드

백준 1111 IQ Test 파이썬 풀이

728x90

난이도 : 골드3

풀이일 : 07204

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

 

1111번: IQ Test

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

www.acmicpc.net


링크로 이동하기 귀찮은 분들을 위한 문제 캡쳐

링크로 이동하시면 더 많은 예제가 있습니다.


풀이 코드

import sys

# 조건 외 항 검사
def check(x, y):
    for i in range(N-1):
        if num[i] * x + y != num[i+1]:
            return print('B')
    return print(num[-1] * x + y)

N = int(sys.stdin.readline().strip())
num = list(map(int, sys.stdin.readline().split()))

# 숫자가 2개 이하인 경우
if N <= 2:
    if N > 1 and num[0] == num[1]:
        print(num[0])
    else:
        print('A')
# 숫자가 3개 이상이면 a, b 구하기
else:
    if not num[1] - num[0]:
        a = 1
    else:
        a = (num[2] - num[1]) // (num[1] - num[0])
    b = num[1] - num[0] * a
    check(a, b)
  • check 함수 : 도출한 a, b 규칙이 적용되지 않는 항목이 있는지 검사
  • 주어진 숫자가 2개 이하인 경우 별도 처리
    • 주어진 숫자가 1개라면 결과는 한 숫자로 정할 수 없으므로 A 출력
    • 주어진 숫자가 2개인 경우
      • 두 항의 숫자가 같으면, 다음 숫자도 같은 숫자 출력
      • 두 항의 숫자가 다르면, 결과는 한 숫자로 정할 수 없으므로 A 출력
  • 주어진 숫자가 3개 이상이라면, 이차 방정식으로 a, b 도출
  • 도출한 a, b로 check 함수 실행
    • 조건 외 항목을 포함한다면 B 출력
    • 아니라면 마지막 항목*a+b 출력

느낀점

그냥 수학문제인데 엄청 틀렸다. 뇌를 잠시 어디에 놓고 온 기분이었다.

요즘 시도한 파이썬 알고리즘 자꾸 실패해서 기분이 좋지 않았는데 오늘은 좋아야 하나

앞으로는 조금 더 꾸준히 풀어서 감을 잃지 않도록 해야지