연습장
61. 겹치는 선분의 길이 본문
Q. 선분 3개가 평행하게 놓여 있습니다. 세 선분의 시작과 끝 좌표가 [[start, end], [start, end], [start, end]] 형태로 들어있는 2차원 배열 lines가 매개변수로 주어질 때, 두 개 이상의 선분이 겹치는 부분의 길이를 return 하도록 solution 함수를 완성해보세요.
lines가 [[0, 2], [-3, -1], [-2, 1]]일 때 그림으로 나타내면 다음과 같습니다.
문제의 이해를 돕기위해 나머지 예시 케이스도 그려보겠다.
2번째의 경우
점에서 겹치는건 영향을 주지않고 선분이 겹치는게 없으므로 0이 된다.
3번째의 경우
1-9까지 => 8칸
3선분이 겹치는 3-5 구간은 추가로 영향을 주지 않는것을 알 수 있다.
1. 겹치는 구간은 1단위로 계산을 한다.
2. 1단위안에 있는 숫자를 기준으로 생각해보자
0-1 사이에는 0.5라는 수가 반드시 들어간다.
1-2 사이에는 1.5라는 수가 반드시 들어간다.
이런식으로 선분을 구체화 할 수 있다.
[0,5] 의 경우 -> [0.5, 1.5, 2.5, 3.5, 4.5] 이며
[3,9] 의 경우 -> [3.5, 4.5, 5.5, 6.5, 7.5, 8.5]
[1,10] 의 경우 -> [1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5] 이고
전체 원소는 다음과 같다.
-> [
0.5,
1.5, 1.5,
2.5, 2.5,
3.5, 3.5, 3.5,
4.5, 4.5, 4.5,
5.5, 5.5,
6.5, 6.5,
7.5, 7.5,
8.5 , 8.5,
9.5
]
같은 원소가 2개 이상인
[1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5]
경우가 겹치는 부분이 되며 원소의 갯수인 8 이 겹치는 길이와 같으며 , 우리가 원하는 결과 값이다.
이를 응용하여
중복되는 갯수를 새어줄 객체인 dic 를 하나 만들고
총 3개의 선분이므로 j 의 값은 0 1 2 만 들어가도록 한다.
그 다음 for 문은 선분을 숫자로 만드는 함수이며
i 값에 0.5 더한 값을
if 문을 이용하여 dic 에 저장한다.
이후 다시 i 값을 원래대로 돌려놓는다.
dic 의 value 중 2 이상인 것들의 갯수를 새면
그게 우리가 원하는 선분이 겹치는 부분이 된다.
console.log(dic) 결과
1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 가 각각 2 이상이다. (1부터 9까지 겹친다는 뜻)
--> 위에서 설명한 결과대로 나온것을 알 수 있다.
'프로그래머스 > 0단계' 카테고리의 다른 글
63. 정수를 나선형으로 배치하기 (0) | 2023.08.21 |
---|---|
62. 안전지대 (0) | 2023.08.20 |
60. 평행 (0) | 2023.08.20 |
59. 이차원 배열 대각선 순회하기 (0) | 2023.08.20 |
58. 최빈값 구하기 (0) | 2023.08.19 |