Level 0) 겹치는 선분의 길이 ⭐️

Doozuu·2023년 1월 25일
0

프로그래머스 (JS)

목록 보기
24/183

문제 설명

선분 3개가 평행하게 놓여 있습니다. 세 선분의 시작과 끝 좌표가 [[start, end], [start, end], [start, end]] 형태로 들어있는 2차원 배열 lines가 매개변수로 주어질 때, 두 개 이상의 선분이 겹치는 부분의 길이를 return 하도록 solution 함수를 완성해보세요.

lines가 [[0, 2], [-3, -1], [-2, 1]]일 때 그림으로 나타내면 다음과 같습니다.

선분이 두 개 이상 겹친 곳은 [-2, -1], [0, 1]로 길이 2만큼 겹쳐있습니다.

제한 사항

lines의 길이 = 3
lines의 원소의 길이 = 2
모든 선분은 길이가 1 이상입니다.
lines의 원소는 [a, b] 형태이며, a, b는 각각 선분의 양 끝점 입니다.
-100 ≤ a < b ≤ 100

풀이

  1. a와 b의 값의 범위는 -100부터 100까지 이므로 크기가 200 + 1인 배열을 만들어 값을 모두 0으로 초기화 해놓는다.
  2. lines에 있는 각각의 배열에 대해 범위 안에 있는 값들을 모두 구해서 개수를 카운팅 해준다.
    (여기서 index에 100을 더하는 이유는 line[100]이 원점이기 때문이다.)
    (주의 : 길이를 구할 때 끝 점은 포함하면 안되므로 a <= b 로 하지 않고 a < b 로 해주어야 한다.)
    ex) lines = [[0, 1], [2, 5], [3, 9]]
    0 : line[0+100]++ (0의 개수 1증가)
    2,3,4 : line[2+100]++ (2의 개수 1증가), line[3+100]++ (3의 개수 1증가), line[4+100]++ (4의 개수 1증가)
    3,4,5,6,7,8 : line[3+100]++ (3의 개수 1증가), line[4+100]++ (4의 개수 1증가),,,
  3. 2개 이상 겹치는 부분의 개수를 구해주면 되므로 1보다 큰 값들을 filter 하여 길이를 구해준다.
function solution(lines) {
    let line = new Array(201).fill(0);
    lines.forEach(([a, b]) => {
        for(; a < b; a++) line[a+100]++;
    });
    return line.filter(n => n > 1).length;
}
profile
모든게 새롭고 재밌는 프론트엔드 새싹

0개의 댓글