아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

정사각형 배치를 사전식 순서로 나열하기

면접 대비

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

요약
n을 내림차순 부분들의 합으로 나누는 모든 분할을 찾아, 내림차순 사전순으로 한 줄씩 출력한다.
난이도

보통10점 중 5점

유형
백트래킹, 재귀, 구현, 조합론
정답자
아직 제출이 없습니다

문제

같은 크기의 정사각형 종이가 nn개 있다. 이 종이들의 아랫변을 수평으로 맞춰 여러 개의 열로 나란히 세운다. 단, 서로 이웃한 두 열은 왼쪽 열의 높이가 오른쪽 열의 높이보다 낮아지지 않도록(즉 왼쪽에서 오른쪽으로 갈수록 높이가 같거나 낮아지도록) 배치해야 한다. 예를 들어 n=5n = 5일 때는 다음과 같이 7가지 배치가 가능하다.

각 배치는 왼쪽 열부터 차례로 그 열에 쌓인 정사각형의 개수를 나열한 수열로 나타낸다. 예를 들어 n=5n = 5일 때 위의 7가지는 각각

(5)(4,1)(3,2)(3,1,1)(2,2,1)(2,1,1,1)(1,1,1,1,1)(5)\quad (4, 1)\quad (3, 2)\quad (3, 1, 1)\quad (2, 2, 1)\quad (2, 1, 1, 1)\quad (1, 1, 1, 1, 1)

로 표현된다.

nn이 주어졌을 때 가능한 모든 배치를 사전식 순서로 출력하는 프로그램을 작성하여라. n≤30n \le 30이다. 여기서 사전식 순서란, 두 배치 (a1,a2,…,as)(a_1, a_2, \ldots, a_s)와 (b1,b2,…,bt)(b_1, b_2, \ldots, b_t)에 대해 a1>b1a_1 > b_1이거나, 어떤 정수 i>1i > 1이 존재하여 a1=b1,…,ai−1=bi−1a_1 = b_1, \ldots, a_{i-1} = b_{i-1}이고 ai>bia_i > b_i가 성립할 때 (a1,a2,…,as)(a_1, a_2, \ldots, a_s)를 (b1,b2,…,bt)(b_1, b_2, \ldots, b_t)보다 먼저 출력하도록 정한 순서를 말한다.

입력

첫째 줄에 정수 nn이 주어진다.

출력

가능한 모든 배치를 사전식 순서로 한 줄에 하나씩 출력하고, 마지막에 개행 문자를 넣는다. 배치 (a1,a2,…,as)(a_1, a_2, \ldots, a_s)는 정수 a1,a2,…,asa_1, a_2, \ldots, a_s를 이 순서대로 공백 하나로 구분하여 출력한다.

예제1

  1. 예제 1

    입력
    5
    
    예상 출력
    5
    4 1
    3 2
    3 1 1
    2 2 1
    2 1 1 1
    1 1 1 1 1