로봇 청소기

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

요약
오염된 칸 N개의 y좌표를 x좌표 순으로 정렬한 수열이 주어질 때, 4방향 연결된 오염 영역 개수의 최솟값과 최댓값을 구한다.
난이도

어려움10점 중 8점

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

문제

LG ThinQ는 LG전자의 AI 플랫폼으로, 가전제품의 상태를 실시간으로 모니터링하고 사용자에게 맞춤형 서비스를 제공한다.

LG ThinQ AI를 탑재한 로봇 청소기가 정사각형 모양의 방안에 놓여 있다. 이 로봇은 방바닥을 109×10910^9\times 10^9 크기의 격자로 나누어 각 칸에 오염물질이 있는지를 판단할 수 있다. 편의상 오염물질이 있는 칸을 오염된 칸이라고 하자. 위에서 yy번째 가로줄에서 왼쪽에서 xx번째에 있는 칸의 좌표를 (x,y)(x,y)라고 할 때, 이 로봇은 NN개의 서로 다른 오염된 칸의 위치 정보를 다음의 압축 과정을 거쳐 서버로 전송한다.

  1. 오염된 칸들의 좌표 (x,y)(x,y)를 xx좌표가 증가하는 순서로, xx좌표가 같으면 yy좌표가 증가하는 순서로 정렬한다.
  2. 이렇게 정렬된 좌표들의 xx좌표를 제거하고 yy좌표만 순서대로 서버로 보낸다.

두 오염된 칸이 서로 상하좌우로 인접하면 같은 오염 영역에 속한다고 할 때, 서버는 로봇이 보낸 데이터를 받아서 오염 영역의 개수를 추측하여야 한다. 서버가 받은 데이터가 주어질 때, 가능한 오염 영역의 개수의 최솟값과 최댓값을 구하시오.

입력

첫째 줄에는 오염된 칸의 개수 NN이 주어진다. (1≤N≤2000001 \le N \le 200000)

다음 NN줄에 걸쳐, 서버가 받은 오염된 칸들의 yy좌표를 의미하는 NN개의 정수 y_1,⋯ ,y_Ny\_1, \cdots, y\_N이 한 줄에 하나씩 순서대로 주어진다. (1≤y_i≤1091 \le y\_i \le 10^9)

출력

첫째 줄에 오염 영역의 개수의 최솟값을 출력한다.

둘째 줄에 오염 영역의 개수의 최댓값을 출력한다.

예제1

  1. 예제 1

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