흐름 배치

면접 대비

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

요약
최대 너비 제한 아래 사각형을 왼쪽부터 배치하고, 들어가지 않으면 다음 줄로 넘긴 뒤 최종 창의 너비와 높이를 구한다.
난이도

쉬움10점 중 3점

유형
시뮬레이션, 구현, 배열
정답자
아직 제출이 없습니다

문제

흐름 배치 관리자는 직사각형 객체들을 직사각형 창 안에 왼쪽에서 오른쪽 순서로 한 줄씩 채워 넣는다. 현재 줄의 남은 공간에 다음 직사각형이 들어가지 못하면, 그 직사각형은 지금까지 놓인 모든 직사각형 아래의 새 줄 왼쪽 끝으로 내려가고, 거기서부터 다시 왼쪽에서 오른쪽으로 채우기가 이어진다.

여러 직사각형의 크기와 창의 최대 너비가 주어질 때, 모든 직사각형을 배치한 뒤 최종 창의 크기를 구하는 프로그램을 작성하라.

창의 너비는 가장 넓은 줄의 너비(그 줄에 놓인 직사각형들의 너비 합)와 같고, 창의 높이는 각 줄 높이의 합과 같다. 이때 한 줄의 높이는 그 줄에서 가장 높은 직사각형의 높이이다.

예를 들어 최대 너비가 35인 창에 크기가 각각 10 x 5, 20 x 12, 8 x 13인 직사각형 세 개가 주어지면, 앞의 두 직사각형은 첫 번째 줄에 함께 놓이고(10 + 20 = 30 ≤ 35), 세 번째 직사각형은 두 번째 줄을 시작한다(30 + 8 = 38 > 35). 최종 창의 크기는 30 x 25이다. 너비는 10 + 20 = 30이고 높이는 12 + 13 = 25이기 때문이다.

입력

입력은 하나 이상의 데이터 집합으로 이루어지며, 마지막 줄에는 0 하나만 주어진다.

각 데이터 집합은 창의 최대 너비를 나타내는 정수 m (1≤m≤801 \le m \le 80)이 적힌 줄로 시작한다. 그 뒤로 직사각형의 크기를 나타내는 줄이 1개 이상 15개 이하로 이어지며, 각 줄에는 직사각형의 너비가 먼저, 그다음 높이가 적혀 있다. 직사각형 목록의 끝은 -1 -1 쌍으로 표시되며, 이 쌍은 실제 직사각형이 아니다.

각 직사각형의 너비는 1 이상 80 이하, 높이는 1 이상 100 이하이다.

출력

각 데이터 집합에 대해, 최종 창의 너비, 공백 한 칸, 소문자 x, 공백 한 칸, 최종 창의 높이를 차례로 출력한다.

예제3

  1. 예제 1

    입력
    35
    10 5
    20 12
    8 13
    -1 -1
    25
    10 5
    20 13
    3 12
    -1 -1
    15
    5 17
    5 17
    5 17
    7 9
    7 20
    2 10
    -1 -1
    0
    
    예상 출력
    30 x 25
    23 x 18
    15 x 47
    
  2. 예제 2

    입력
    10
    5 5
    -1 -1
    0
    
    예상 출력
    5 x 5
    
  3. 예제 3

    입력
    10
    10 3
    10 4
    -1 -1
    0
    
    예상 출력
    10 x 7