Skip to content

Commit ad41822

Browse files
committed
[Gold V] Title: 선 긋기, Time: 4080 ms, Memory: 268448 KB -BaekjoonHub
1 parent 79dfa42 commit ad41822

2 files changed

Lines changed: 67 additions & 0 deletions

File tree

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# [Gold V] 선 긋기 - 2170
2+
3+
[문제 링크](https://www.acmicpc.net/problem/2170)
4+
5+
### 성능 요약
6+
7+
메모리: 268448 KB, 시간: 4080 ms
8+
9+
### 분류
10+
11+
정렬, 스위핑
12+
13+
### 제출 일자
14+
15+
2026년 3월 24일 08:05:11
16+
17+
### 문제 설명
18+
19+
<p>매우 큰 도화지에 자를 대고 선을 그으려고 한다. 선을 그을 때에는 자의 한 점에서 다른 한 점까지 긋게 된다. 선을 그을 때에는 이미 선이 있는 위치에 겹쳐서 그릴 수도 있는데, 여러 번 그은 곳과 한 번 그은 곳의 차이를 구별할 수 없다고 하자.</p>
20+
21+
<p>이와 같은 식으로 선을 그었을 때, 그려진 선(들)의 총 길이를 구하는 프로그램을 작성하시오. 선이 여러 번 그려진 곳은 한 번씩만 계산한다.</p>
22+
23+
### 입력
24+
25+
<p>첫째 줄에 선을 그은 횟수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 다음 N개의 줄에는 선을 그을 때 선택한 두 점의 위치 x, y (-1,000,000,000 ≤ x < y ≤ 1,000,000,000)가 주어진다.</p>
26+
27+
### 출력
28+
29+
<p>첫째 줄에 그은 선의 총 길이를 출력한다.</p>
30+
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
let input = require('fs').readFileSync('./dev/stdin').toString().trim().split('\n');
2+
let N = Number(input[0]);
3+
let arr = input.slice(1, N + 1).map((l) => l.split(' ').map(Number));
4+
5+
arr.sort((a, b) => a[1] - b[1]);
6+
arr.sort((a, b) => a[0] - b[0]);
7+
8+
let x = -1000000001;
9+
let y = -1000000001;
10+
let answer = 0;
11+
12+
for (let i = 0; i < N; i++) {
13+
let nowX = arr[i][0];
14+
let nowY = arr[i][1];
15+
if (nowX >= x && nowX <= y) {
16+
if (nowY > y) {
17+
y = nowY;
18+
}
19+
} else if (nowX > y) {
20+
answer += y - x;
21+
x = nowX;
22+
y = nowY;
23+
}
24+
// 마지막 선 처리
25+
if (i === N - 1) {
26+
answer += y - x;
27+
}
28+
}
29+
console.log(answer);
30+
31+
// 100만짜리 배열 두고 채우면 안되나? -> 이어지는 선인지 아닌지 확인하면서 계산하기가 빡일듯
32+
33+
// 하나씩 보고 배열에 넣는데 이어지는 선인지 아닌지에 따라 최신화 하면서 넣으면 될 듯?
34+
// 정렬 시키고
35+
// nowX가 X보다 크거나 같고 Y보다 작거나 같을때 nowY가 Y보다 크다면 Y 최신화
36+
// nowX가 Y보다 크다면 새로운 배열임 -> 지금까지 한거 계산하고 X,Y 다시 세팅
37+
// 만약 마지막 선이면 -> 지금까지 한 X,Y 계산

0 commit comments

Comments
 (0)