Dev/Algorithm

[코딩테스트] 겹치는 선분의 길이

隣席の開発者群 2023. 5. 22. 10:49
반응형

정답률 내려가니까 그냥 맛이 갔다. 

내 뇌에서 처리가 안된다. 솔루션 찾는 방향 자체가 떠오르지가 않는데 이거 진짜 어떻게 해야하지?

풀이 찾아보니까 배열에 선분 길이만큼 인덱스마다 1씩 더해주고 이게 2이상인 부분들 갯수 구하면 된다고 써둔걸 보니까 바로 아.. 그러네... 응용이 안된다 나는.. 라는 허탈함이 몰려와버린다. 주륵..

 


 

문제 설명

선분 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

 

 

풀이(퍼왔습니다.)

function solution(lines) {
  var answer = 0;
  let lineMap = new Array(200); // 제한 사항까지 고려해서 길이 200 
  lineMap.fill(0); // 각 인덱스마다 0으로 채워넣기

  for (let i = 0; i < 3; i++) {
    let left = lines[i][0];
    let right = lines[i][1];  // 시작지점 끝지점 찾고

    for (let j = left; j < right; j++) {
      lineMap[j + 100] += 1; // 미리 만들어둔 배열 해당 위치에다가 1씩 추가
    }
  }

  for (let i in lineMap) {
    if (lineMap[i] > 1) {
      answer += 1; // 배열 쭉 돌면서 1보다 큰 부분 찾아서 카운트
    }
  }

  return answer;
}

https://velog.io/@me-hana/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-LV.0-Javascript-%EA%B2%B9%EC%B9%98%EB%8A%94-%EC%84%A0%EB%B6%84%EC%9D%98-%EA%B8%B8%EC%9D%B4

 

[프로그래머스 LV.0] (Javascript) 겹치는 선분의 길이

프로그래머스 - 겹치는 선분의 길이\-100≤범위≤100 안에 들어가게 될 선분들이 놓인 공간이 길이가 200인 배열이라고 생각하자.그니까 그림을 그려보면 이렇게 되는 거다 (겹친 부분은 주황색으

velog.io

 

LIST

'Dev > Algorithm' 카테고리의 다른 글

[코딩테스트] 옹알이  (0) 2023.05.22
[코딩테스트] 평행  (0) 2023.05.22
[코딩테스트] 안전지대  (1) 2023.05.19
[코딩테스트] 다항식 더하기  (0) 2023.05.17
[Algorithm] 큐와 스택(Queue, Stack) 그리고 트리(Tree)  (0) 2023.04.17