티스토리 뷰
2170번: 선 긋기
첫째 줄에 선을 그은 횟수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 다음 N개의 줄에는 선을 그을 때 선택한 두 점의 위치 x, y(-1,000,000,000 ≤ x < y ≤ 1,000,000,000)가 주어진다.
www.acmicpc.net
선긋기
좌표가 겹치는 경우와 포함하는 경우들을 생각하면서 경우를 나눴다. 즉, 다음 선이 이전 선에 포함될 수도 있고, 겹치지 않을 수도 있다. 다음 선이 이전 선에 포함이 되는 경우는 생각하지 않아도 되는 경우이다.(생각해보면 당연 이전 선이 더 큰 범위이기 때문) 이렇게 경우를 나눠서 생각해보면 된다. 이렇게 선의 좌표를 구해주고 마지막엔 선의 길이를 구해준다.
function solution(n, arr) {
let answer = 0;
// 연결된 선을 구해야 하므로 시작을 기준으로 sort를 해준다.
arr.sort((a, b) => a[0] - b[0]);
// 처음 좌표의 왼쪽, 오른쪽 좌표 입력
let left = arr[0][0];
let right = arr[0][1];
// 1번 인덱스부터 비교한다.
for (let i = 1; i < n; i++) {
// 이전 좌표 x,y 다음 선의 좌표 x2,y2 라 가정.
// x2가 y보다 작거나 같을 때, y2가 y보다 클 때 겹치는 모든 경우를 처리해줄 수 있다.
// x2,y2가 x,y에 포함되는 경우는 생각하지 않아도 된다. 포함이 되기 때문.
// y 좌표를 옮겨준다.
if (arr[i][0] <= right && arr[i][1] > right) {
right = arr[i][1];
}
// 좌표들이 겹치지 않을 때
else if (arr[i][0] > right) {
// 이전 좌표들의 거리를 먼저 더해준다.
answer += right - left;
right = arr[i][1];
left = arr[i][0];
}
}
// 끝나고나서 구해진 마지막 좌표의 합을 구해준다.
answer += right - left;
return answer;
}
console.log(solution(n, arr));
728x90
반응형
'Algorithm > Boj' 카테고리의 다른 글
백준 14503번 : 로봇 청소기 (JavaScript) (0) | 2021.10.31 |
---|---|
[프로그래머스] 모의고사(C++) - 완전탐색 (0) | 2021.07.13 |
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- Git
- 백준
- flexbox
- 마크다운 이미지 업로드
- 42서울 합격 후기
- css
- 42seoul
- C언어문제
- 프로그래머스 카카오
- C언어 문제
- 42서울
- 프로그래머스 코딩테스트
- vscode
- c언어 함수
- 프로그래머스 코테
- React
- C언어
- HEXO
- html
- 자바스크립트
- 42서울 라피신
- JavaScript
- 알고리즘
- 프로그래머스 자바
- git vi
- vscode commit vi
- JS
- windows 10 ubuntu
- c언어알고리즘
- 42서울 합격
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함