반응형
혼자 힘으로 풀었는가? O
알고리즘 분류
- 정렬
- 스위핑
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)가 주어진다.
출력
첫째 줄에 그은 선의 총 길이를 출력한다.
문제 설명을 보고 도화지라고 하길래 좌표평면으로 구하는 줄 알았는데
자세히 읽어보니 그냥 선 위에서 구하는 문제였다.
시작점과 끝점을 비교하여 총 길이를 구하는 문제다.
스위핑 알고리즘은 잘 모르겠고 단순하게 풀어도 풀리는 문제였다.
파이썬이라 쉬운걸지도
import sys
input = sys.stdin.readline
n = int(input())
data = []
for i in range(n):
data.append(list(map(int, input().split())))
data.sort()
start = data[0][0]
end = data[0][1]
result = 0
for i in range(1, n):
if end >= data[i][0]:
end = max(end, data[i][1])
else:
result += end-start
start = data[i][0]
end = data[i][1]
print(result+(end-start))
3%에서 틀릴 경우 반례
3
1 6
2 3
4 5
정답 : 5
반응형
'Algorithm > 백준' 카테고리의 다른 글
[Python] 백준 1339번 - 단어 수학 (골드 4) (1) | 2024.06.04 |
---|---|
[Python] 백준 1976번 - 여행 가자 (골드 4) (0) | 2024.06.03 |
[Python] 백준 11066번 - 파일 합치기 (골드 3) (0) | 2024.05.31 |
[Python] 백준 11049번 - 행렬 곱셈 순서 (골드 3) (0) | 2024.04.09 |
[Python] 백준 9466번 - 텀 프로젝트 (골드 3) (1) | 2024.03.21 |
댓글