1일 1PS 5일차!

문제


골드 3

  • 수학으로 분류되는 문제는 대부분 쉬운 편이다.
  • 출력 포맷이 존재하기에 result 를 두어 형태를 맞춰준다.
  • IMPOSSIBLE 을 출력하기 위해 while 문에서 나눠지는 지 확인하는 Boolean 값을 둔다.

포인트


  1. n, n+1, n+2 .. 이런 형태로 연속된다.
  2. 총 합은 n * cnt + sum 으로 cnt 는 연속된 숫자의 수, sum 은 + 1, + 2 등의 총 합이다.
  3. n 의 최솟값은 1이기 때문에 1 * cnt + sum > num 이라면 불가능한 경우이다.
  4. while 문을 돌면서 num - sum 이 cnt 로 나누어 떨이지면 연속된 숫자로 표현할 수 있다.

코드



t = int(input())

for _ in range(t):
    num = int(input())
    cnt = 2
    sum = 1
    flag = False
    result = ""
    while cnt <= num - sum:
        if (num - sum) % cnt == 0:
            start = (num - sum) // cnt
            result += str(num) + " = "
            for j in range(cnt):
                result += str(start + j) + " + "
            print(result[:-2])
            flag = True
            break
        sum += cnt
        cnt += 1
    if not flag:
        print("IMPOSSIBLE")


업데이트:

댓글남기기