열린 구간

면접 대비

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

요약
테스트 케이스마다 최대 50개의 열린 구간이 주어질 때, 끝점만 만나는 구간은 겹치지 않는 것으로 보고 서로 겹치지 않는 최대 개수의 구간을 고른다.
난이도

보통10점 중 4점

유형
그리디, 정렬, 구간, 구현
정답자
아직 제출이 없습니다

문제

수직선 위에 nn개의 열린 구간 (a1,b1),(a2,b2),…,(an,bn)(a_1, b_1), (a_2, b_2), \dots, (a_n, b_n)이 주어진다. 각 구간은 같은 자원을 사용해야 하는 어떤 활동의 시작 시각과 끝 시각을 나타낸다. 서로 겹치는 두 구간이 없도록 구간을 고를 때, 고를 수 있는 구간의 최대 개수를 구하여라.

구간이 열린 구간이므로, 한 구간의 끝점과 다른 구간의 시작점이 같은 경우 — 예를 들어 (1,3)(1, 3)과 (3,5)(3, 5) — 두 구간은 겹치지 않는 것으로 보아 둘 다 고를 수 있다.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫 줄에는 구간의 개수를 나타내는 양의 정수 nn (n≤50n \le 50)이 주어진다. 이어지는 nn개의 줄에는 각각 하나 이상의 공백으로 구분된 두 양의 정수가 주어지며, 이는 하나의 구간을 나타낸다. 입력의 끝은 00 하나만 있는 줄로 표시된다.

출력

각 테스트 케이스마다, 서로 겹치지 않도록 고를 수 있는 구간의 최대 개수를 한 줄에 하나씩 출력한다.

예제2

  1. 예제 1

    입력
    5
    10 12
    2 6
    5 8
    3 9
    1 4
    2
    1 3
    3 5
    0
    
    예상 출력
    3
    2
    
  2. 예제 2

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