알고리즘 공부/백준

(Python)백준 코딩테스트 연습 - 수열의 합(1024)

HRuler 2023. 3. 1. 16:12

1. 문제

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

 

1024번: 수열의 합

첫째 줄에 N과 L이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이고, L은 2보다 크거나 같고, 100보다 작거나 같은 자연수이다.

www.acmicpc.net

2. 풀이

import sys
input = sys.stdin.readline
from collections import deque

n, l = map(int, input().split())

n_l = deque()
iter_b = True

for i in range(l, 101):
    if iter_b == False:
        break
    n_l.clear()
    temp = n // i
    n_l.append(temp)
    if i % 2 == 1:
        if temp - (i % 2) < 0:
            print(-1)
            break
        for j in range(1, (i // 2) + 1):
            if temp - j < 0:
                print(-1)
                iter_b = False
                break
            n_l.appendleft(temp - j)
            n_l.append(temp + j)
        
    elif i % 2 == 0:
        n_l.append(temp+1)
        for j in range(1, (i // 2)):
            if temp - j < 0:
                print(-1)
                iter_b = False
                break
            n_l.appendleft(temp - j)
            n_l.append(temp + j + 1)
    
    if sum(n_l) == n:
        print(*n_l)
        break
    if i == 100:
        print(-1)

3. 후기

 - 위 문제는 4번의 제출만에 해결할 수 있었다.

 계속해서 어느 부분의 코드가 잘못되었는지를 찾아보았는데, 아무리 생각해도 코드에 문제가 없다고 생각하던 중에 설마 출력하는 부분에서 틀린건가라는 생각으로 출력 부분을 수정했는데 바로 통과하였다.

 문제와 직접적인 연관을 갖는 코드의 문제를 해결하는 것도 중요하겠지만, 도출된 값을 정확하게 출력하는 것도 중요하겠다.