오뚝이개발자

유레카 이론 본문

코딩 테스트/백준

유레카 이론

땅어 2021. 7. 13. 20:22
728x90
300x250

문제


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

 

10448번: 유레카 이론

프로그램은 표준입력을 사용한다. 테스트케이스의 개수는 입력의 첫 번째 줄에 주어진다. 각 테스트케이스는 한 줄에 자연수 K (3 ≤ K ≤ 1,000)가 하나씩 포함되어있는 T개의 라인으로 구성되어

www.acmicpc.net

 

 

나의 풀이


사실 처음엔 itertools 모듈의 중복조합을 사용해 구했다. 물론 답은 맞았지만 조금 더 nice해 보이는 코드가 있어 첨부한다. 이 문제는 브루트 포스 문제로 그냥 가능한 경우를 모두 카운트 해주면 된다.

문제에서 주어진 조건 중 1000이하의 자연수만 입력으로 주어진다고 했기 때문에 1000 이하의 모든 유레카 수를 구해두면 된다. eureka라는 flag 배열을 사용해 해당 index의 수가 유레카 수라면 1로 flag-up 해준다. 삼중 for문을 사용해 세 개의 수를 더해서 삼각수가 되는 1000 이하의 수들에 대해 1로 flag-up 시켜주고 입력으로 수를 받아 이들을 반환해주면 된다.

 

코드


triangle = [n*(n+1)//2 for n in range(1, 46)]
eureka = [0] * 1001

#미리 1000이하의 모든 유레카 수를 구한다
for i in triangle:
    for j in triangle:
        for k in triangle:
            if i+j+k <= 1000:
                eureka[i+j+k] = 1

T = int(input())
for _ in range(T):
    print(eureka[int(input())])

 

 

 

728x90
300x250

'코딩 테스트 > 백준' 카테고리의 다른 글

[백준 1259] 팰린드롬 수  (0) 2021.09.20
[백준 1013] Contact  (0) 2021.09.20
[백준 2252] 줄 세우기  (0) 2021.07.04
[백준 1937] 욕심쟁이 판다  (0) 2021.07.03
[백준9376] 탈옥  (0) 2020.05.15
Comments