1 분 소요

1. 문제

https://www.acmicpc.net/problem/2170

  • 스위핑 문제
// 문제
매우  도화지에 자를 대고 선을 그으려고 한다. 
선을 그을 때에는 자의  점에서 다른  점까지 긋게 된다. 
선을 그을 때에는 이미 선이 있는 위치에 겹쳐서 그릴 수도 있는데, 
여러  그은 곳과   그은 곳의 차이를 구별할  없다고 하자.

이와 같은 식으로 선을 그었을 , 
그려진 ()  길이를 구하는 프로그램을 작성하시오. 
선이 여러  그려진 곳은  번씩만 계산한다.

// 입력
첫째 줄에 선을 그은 횟수 N(1  N  1,000,000) 주어진다. 
다음 N개의 줄에는 선을 그을  
선택한  점의 위치 x, y(-1,000,000,000  x < y  1,000,000,000) 주어진다.

// 출력
첫째 줄에 그은 선의  길이를 출력한다.

// 예제 입력 1 
4
1 3
2 5
3 5
6 7

// 예제 출력 1 
5


2. 핵심 아이디어

  • O(nlogn)으로 해결
  • 스위핑 알고리즘 활용


3. Python 문제풀이

import sys
input = sys.stdin.readline

n = int(input())
lines = list(tuple(map(int, input().split())) for _ in range(n))

lines.sort()

start = lines[0][0]
end = lines[0][1]
result = 0

for i in range(1, n) :
  ns, ne = lines[i]

  if end > ns :
    end = max(end, ne)
  else :
    result += (end - start)
    start, end = ns, ne

result += (end - start)
print(result)


4. Java 문제풀이


댓글남기기