티스토리 뷰
선긋기
좌표가 겹치는 경우와 포함하는 경우들을 생각하면서 경우를 나눴다. 즉, 다음 선이 이전 선에 포함될 수도 있고, 겹치지 않을 수도 있다. 다음 선이 이전 선에 포함이 되는 경우는 생각하지 않아도 되는 경우이다.(생각해보면 당연 이전 선이 더 큰 범위이기 때문) 이렇게 경우를 나눠서 생각해보면 된다. 이렇게 선의 좌표를 구해주고 마지막엔 선의 길이를 구해준다.
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
- C언어문제
- 42서울 합격
- Git
- vscode
- git vi
- 프로그래머스 자바
- windows 10 ubuntu
- 42서울
- html
- JS
- c언어알고리즘
- 프로그래머스 코테
- 자바스크립트
- C언어 문제
- 프로그래머스 카카오
- 42서울 합격 후기
- HEXO
- vscode commit vi
- React
- css
- 백준
- C언어
- c언어 함수
- flexbox
- 알고리즘
- 42seoul
- JavaScript
- 마크다운 이미지 업로드
- 프로그래머스 코딩테스트
- 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 | 31 |
글 보관함