chldkato

백준 10448 유레카 이론 (파이썬) 본문

백준

백준 10448 유레카 이론 (파이썬)

chldkato 2020. 6. 5. 19:30

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

 

10448번: 유레카 이론

문제 삼각수 Tn(n ≥ 1)는 [그림]에서와 같이 기하학적으로 일정한 모양의 규칙을 갖는 점들의 모음으로 표현될 수 있다. [그림] 자연수 n에 대해 n ≥ 1의 삼각수Tn는 명백한 공식이 있다. Tn = 1 + 2 +

www.acmicpc.net

1. 삼각수를 미리 다 구하여 a에 저장한다

2. 중복조합으로 삼각수 3개를 정하고 입력받은 n과 일치하는지 확인한다

3. 일치하면 1을 리턴하고 출력한다. 모든 경우를 고려해도 일치하지 않으면 0을 출력한다

import sys

input = sys.stdin.readline

def f(cnt):
    if cnt == 3:
        res = 0
        for i in range(len(a)):
            if select[i] > 0:
                res += a[i] * select[i]
        if res == n:
            return 1
        else:
            return 0

    for i in range(len(a)):
        select[i] += 1
        if f(cnt+1) == 1:
            return 1
        select[i] -= 1

a, i = [], 0
while True:
    i += 1
    ni = i * (i+1) // 2
    if ni >= 1000:
        break
    a.append(ni)

tc = int(input())
for _ in range(tc):
    n = int(input())
    select = [0 for _ in range(len(a))]
    if f(0) == 1:
        print(1)
    else:
        print(0)

Comments