만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

피라미드

면접 대비

시간 제한1초메모리 제한1024 MB

요약
N개의 블록이 주어질 때 남은 블록으로 만들 수 있는 가장 큰 삼각수를 계속 빼면서, 만들어진 피라미드의 높이를 큰 것부터 출력한다.
난이도

쉬움10점 중 3점

유형
그리디, 수학, 구현, 이분 탐색
정답자
아직 제출이 없습니다

문제

Elena는 정육면체 모양의 블록이 가득 든 상자를 발견하고, 가능한 한 높은 피라미드를 쌓기로 했다. 블록이 남으면 피라미드를 더 쌓는다.

피라미드는 안정적이고 아름다워야 한다. 어떤 피라미드의 맨 아래 층(바닥)이 kk개의 블록으로 이루어지면, 바로 위층은 반드시 k−1k-1개의 블록으로 이루어져야 하고, 이런 식으로 한 층씩 올라간다. 완성된 피라미드는 정확히 kk개의 층을 가지며, 맨 위층에는 항상 블록이 11개 있다. 따라서 높이가 kk인 피라미드는 1+2+⋯+k=k(k+1)21 + 2 + \cdots + k = \frac{k(k+1)}{2}개의 블록을 사용한다.

블록의 개수가 주어질 때, 남아 있는 블록으로 가능한 한 높은 피라미드를 반복해서 쌓는다. 즉, 가진 블록으로 가장 높은 피라미드를 하나 쌓고, 남은 블록으로 다시 가장 높은 피라미드를 쌓는 과정을 블록이 하나도 남지 않을 때까지 반복한다. 이렇게 쌓을 수 있는 피라미드들의 높이를 구하여라.

입력

가진 블록의 개수를 나타내는 정수 NN 하나가 주어진다.

출력

쌓을 수 있는 피라미드들의 높이를 각 줄에 하나씩 출력한다. 높이는 가장 높은 것부터 가장 낮은 것 순으로 출력한다.

제한

  • 1≤N≤1 000 0001 \le N \le 1\,000\,000

예제2

  1. 예제 1

    입력
    20
    
    예상 출력
    5
    2
    1
    1
    
  2. 예제 2

    입력
    3
    
    예상 출력
    2