탭 vs 공백

면접 대비

시간 제한2초메모리 제한512 MB

요약
최대 366일 각각에 대해 N개의 투숙 구간으로 탭과 스페이스 손님 수를 세고, 손님이 있는 날 수, 최대 손님 수, 싸움이 없는 날 수, 그중 최대 손님 수, 가장 오래 묵은 기간을 구한다.
난이도

보통10점 중 4점

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

문제

큐브러버가 운영하는 호텔은 1년 스케줄을 전년도에 미리 정해놓는다. 또, 이 호텔에는 코딩을 할 줄 아는 사람만 투숙할 수 있다. 코딩을 할 때 들여쓰기는 필수이다. 호텔에는 두 종류의 사람이 투숙하는데, 들여쓰기로 탭을 사용하는 사람과 공백을 사용하는 사람이다. 편의를 위해 각각 "탭파"와 "공백파"로 부르도록 하자.

올해는 윤년이기 때문에, 총 366일로 이루어져 있다. 편의상 날짜는 1일-366일로 표시한다.

큐브러버의 호텔에 예약을 한 사람의 수는 N명이고, 각 사람이 투숙 시작일과 종료일을 모두 알고 있다. 모든 사람은 투숙 시작일의 오전 9시에 호텔에 투숙하고, 투숙 종료일의 오후 6시에 호텔에서 나간다. 이 호텔에는 모든 것이 있기 때문에, 호텔 투숙객은 호텔을 벗어나지 않는다.

탭파와 공백파가 만나면 싸운다. 하지만, 탭파와 공백파의 수가 일치하는 날에는 균형이 잡혀서 싸움이 일어나지 않는다. 탭파가 한 명도 없거나 공백파가 한 명도 없으면 호텔 관리자들끼리 왜 호텔 운영을 이런 식으로 하냐며 서로 책임을 돌리면서 싸운다.

호텔 예약 정보가 주어졌을 때, 여러가지 정보를 구해보려고 한다.

입력

첫째 줄에 예약을 한 사람의 수 N(1 ≤ N ≤ 5,000)이 주어진다. 둘째 줄부터 호텔 예약 정보가 한 줄에 하나씩 주어진다.

호텔 예약 정보는 문자 c와 정수 s, e로 이루어져 있다. c가 'T'인 경우는 탭파, 'S'인 경우는 공백파이다. s는 투숙 시작일, e는 투숙 종료일이다. (1 ≤ s ≤ e ≤ 366)

출력

다음 정보를 한 줄에 하나씩 출력한다.

  1. 투숙객이 1명 이상인 날의 수
  2. 가장 많은 투숙객이 있었던 날에 투숙한 사람의 수
  3. 싸움이 없는 날의 수
  4. 싸움이 없는 날 중 가장 많은 투숙객이 있었던 날에 투숙한 사람의 수. 싸움이 없는 날이 없으면 0을 출력한다.
  5. 가장 오랜 기간 투숙한 사람이 투숙한 날의 수

예제2

  1. 예제 1

    입력
    4
    T 151 307
    S 343 352
    T 117 145
    S 24 128
    
    예상 출력
    289
    2
    12
    2
    157
    
  2. 예제 2

    입력
    6
    T 128 130
    S 128 131
    S 131 140
    S 131 141
    T 131 200
    T 140 200
    
    예상 출력
    73
    4
    4
    4
    70