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

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

타일 블록 쌓기

면접 대비

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

요약
두 종류의 돌기 수가 아래 블록보다 작아지지 않도록 쌓을 때 가장 높이 쌓는 블록 수를 구합니다.
난이도

보통10점 중 5점

유형
동적 계획법, 정렬
정답자
아직 제출이 없습니다

문제

마이클은 생일 선물로 조부모에게서 게임 세트를 받았다. 상자 안에는 타일 블록 nn개가 들어 있고, 블록의 모양은 다음과 같다.

그림 1: 파라미터가 (3,2)(3, 2)인 타일 블록.

블록마다 파라미터 (ℓ,m)(\ell, m)이 정해져 있다. 윗면에는 왼쪽에 돌기가 ℓ\ell개, 가운데에 돌기가 mm개 튀어나와 있고, 아랫면에는 같은 자리에 왼쪽 ℓ\ell개, 가운데 mm개의 홈이 파여 있다.

(ℓ,m)(\ell, m) 블록을 같은 (ℓ,m)(\ell, m) 블록 위에 올릴 수 있다는 것은 쉽게 알 수 있다. 쌓는 방법은 이것만이 아니다. (ℓ,m)(\ell, m) 블록을 (ℓ′,m′)(\ell', m') 블록 위에 올릴 수 있는 조건은 ℓ≥ℓ′\ell \ge \ell'이고 m≥m′m \ge m'인 것이며, 이 조건을 만족할 때만 올릴 수 있다.

블록 nn개가 담긴 상자 B={b1,b2,…,bn}B = \{b_1, b_2, \dots, b_n\}가 주어진다. 블록 bib_i의 파라미터는 (ℓi,mi)(\ell_i, m_i)이다. 이 상자의 블록으로 탑을 쌓을 때, 가장 높은 탑에 들어가는 블록의 개수를 구하라.

입력

입력에는 게임 상자 여러 개가 이어서 주어진다. 각 상자는 정수 nn으로 시작하고, nn은 그 상자에 든 블록의 개수다. 이어지는 nn개 줄에는 각각 정수 두 개가 주어지며, ii번째 블록의 왼쪽 파라미터 ℓi\ell_i와 가운데 파라미터 mim_i를 뜻한다.

nn은 최대 10 00010\,000이고, ℓi\ell_i와 mim_i는 11 이상 100100 이하다. n=0n = 0은 입력의 끝을 뜻한다.

출력

상자마다 그 상자의 블록으로 쌓을 수 있는 가장 높은 탑의 블록 개수를 한 줄에 하나씩 출력한다. 모든 상자를 처리한 뒤에는 마지막 줄에 별표 * 하나만 출력한다.

예제1

  1. 예제 1

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