[ 문제 풀이 ] 백준 1024번 수열의 합

Shin·2022년 1월 24일
0

코딩테스트

목록 보기
3/13

문제 설명

N과 L이 주어질 때, 합이 N이면서, 길이가 적어도 L인 가장 짧은 연속된 음이 아닌 정수 리스트를 구하는 프로그램을 작성하시오.


변수 설명

  • N

    • 타입 : int
    • 저장 데이터 : 합이 될 수 저장
  • L

    • 타입 : int
    • 저장 데이터 : 최소 길이 값을 저장
  • temp

    • 타입 : str
    • 저장 데이터 : 출력할 문자열을 저장
  • x

    • 타입 : int

    • 저장 데이터 : 계산한 수식을 저장


    풀이과정

  1. 합과 최소 길이를 입력 [ N, L ]

  2. for문으로 L부터 100까지 반복

  3. N(i(i+1))2\frac{N-(i*(i+1))}{2} 값을 xx에 저장

  4. 만약 xxii로 나누어 떨어지면 xxii로 나누고 값을 다시 xx 에 저장

  5. xx1-1 보다 크면 ii 만큼 반복하며 jj를 더한 값을 문자열로 저장 [ temp ]


import sys

N, L = map(int, sys.stdin.readline().split())

for i in range(L, 101):  # L은 2보다 크거나 같고, 100보다 작거나 같은 자연수 이기 때문에 100까지만 반복
    x = N - (i * (i + 1) / 2)
    # x = (N - L * ( L + 1) // 2) // L
    temp = ""

    if x % i == 0:
        x = int(x / i)

        if x >= -1:
            for j in range(1, i + 1):
                temp += f"{x + j} "
            print(temp)
            break
else:
    print(-1)
profile
누군가의 선택지가 될 수 있는 사람이 되자

0개의 댓글