Minwook’s portfolio

코딩테스트 문제풀이 겹치는 선분의 길이 풀이 본문

Today I Learned

코딩테스트 문제풀이 겹치는 선분의 길이 풀이

yiminwook 2023. 1. 10. 13:35

 

출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/courses/30/lessons/120876

저작권 관련

더보기

비상업적, 비영리적 용도로 사용합니다.

광고가 노출되지 않는 블로그나 YouTube 채널, GitHub 등에 문제 풀이 게시

 

코딩테스트 연습에 공개된 문제는 (주)그렙이 저작권을 가지고 있습니다. (지문 하단에 별도 저작권 표시 문제 제외)
코딩테스트 연습 문제의 지문, 테스트케이스, 풀이 등과 같은 정보는 비상업적, 비영리적 용도로 게시할 수 있습니다.

※ 2020 KAKAO BLIND RECRUITMENT, Summer/Winter Coding 등의 문제는 기업 코딩 테스트에 나온 문제이나, 

코딩테스트 연습에 공개된 문제이기 때문에 마찬가지로 비상업적, 비영리적 용도로 게시할 수 있습니다.

(2021. 01. 08 업데이트)

 

 

문제 설명.

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

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

 

 

제한사항

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

 

입출력예.                            

lines         result
[[0, 1], [2, 5], [3, 9]]    2
[[-1, 1], [1, 3], [3, 9]]       0
[[0, 5], [3, 9], [1, 10]]    8

 

 

이하생략.

 

 

위 문제를 풀때 고려해야하는 사항.

1. 겹쳐진 선이 2개이상일때는 중복해서 세지 않습니다.

2. 선분의 길이를 구하기 때문에 선분에서 맨 오른쪽 점은 제외합니다. 

 

접근방법.

1. 각 점 왼쪽과 오른쪽 사이의 정수를 배열에 담아 선으로 만듭니다.

2. 중복되는 정수의 갯수를 셉니다.

 

 

function solution(lines) {
    const [a, b, c] = lines;
    const drawLine = (dot) => Array(dot[1] - dot[0]).fill(0).map((el, i) => dot[0] + i); 
    //맨 오른쪽점을 제외하고 선을 긋는다.
    const lineA = drawLine(a);
    const lineB = drawLine(b);
    const lineC = drawLine(c);
    
    const answer = new Set(); //겹치는 2개 이상일때, 중복해서 세지 않도록 Map()을 사용
    const hashTable = new Set();
    const lineAll = [...lineA, ...lineB, ...lineC].forEach(dot => { 
        hashTable.has(dot) ? answer.add(dot) : hashTable.add(dot);
        //정수가 2개이상이면 answer에 담는다.
    });    

    return [...answer].length; //answer의 갯수를 반환
}

'Today I Learned' 카테고리의 다른 글

webpack ts, sass, img loader 설정  (0) 2023.03.06
코딩테스트 문제풀이 소수 찾기  (0) 2023.01.24
Heap 정리  (0) 2022.12.29
Hashtable 정리  (0) 2022.12.28
배열(Array) 정리  (0) 2022.12.26
Comments