[BaekJoon] 백준 2170번 선 긋기
🎈문제
https://www.acmicpc.net/problem/2170
💬설명
- 스위핑 기법으로 푸는 문제라고 한다.스위핑 기법이란 말 그대로 한 쪽 방향부터 시작해서 다른 방향으로 스캔해가면서 쓸어가는 것이라고 보면 된다.
- 풀이 과정
- 시작점을 기준으로 sort한다.
- 다음 line이 이전 line에 포함되는 경우, 일부가 겹치는 경우, 아예 겹치지 않는 경우 이렇게 3가지로 나눠서 생각한다.
- 주의
- 데이터의 크기가 큰만큼 시간초과가 계속 났다.
- 해결책
- import sys -> input = sys.stdin.readline
- arr 속에 line들을 tuple로 저장 (iteration 도는 속도가 tuple이 빠르다고...?)
- pypy로 채점
👩💻코드
# BaekJoon2170.py
import sys
input = sys.stdin.readline
N = int(input())
arr = []
for i in range(N):
arr.append(tuple(map(int, input().split())))
arr.sort()
start = arr[0][0]
end = arr[0][1]
result = 0
for i in range(1, N):
# 겹치는 경우
if arr[i][0] <= end < arr[i][1]:
end = max(end, arr[i][1])
# 겹치지 않는 경우
elif arr[i][0] > end:
result += end - start
start = arr[i][0]
end = arr[i][1]
result += end - start
print(result)
👉참고
728x90
반응형
'CS > Algorithm 문제' 카테고리의 다른 글
[Programmers] 디스크 컨트롤러 (0) | 2021.10.12 |
---|---|
[BaekJoon] 백준 4358번 생태학 (0) | 2021.10.12 |
[BaekJoon] 백준 21609번 상어중학교 (0) | 2021.10.08 |
[Programmers] 더 맵게 (0) | 2021.10.07 |
[Programmers] 주식가격 (0) | 2021.10.07 |