[프로그래머스] 겹치는 선분의 길이

butterbeetle·2023년 2월 3일
0

코딩테스트

목록 보기
60/132
post-thumbnail

문제설명

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

입출력 예

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

내 풀이

function solution(lines) {
    let answer = 0 
    let minX = 0;
    let maxY = 0;
    
    lines.forEach(([x,y])=> {
        minX = x < minX ? x : minX
        maxY = y > maxY ? y : minY
    })
    
    for(let x = minX; x < maxY; x++){
        let y = x+1;
        if((lines[0][0] <= x && y<=lines[0][1])&&(lines[1][0] <= x && y<=lines[1][1]) ||
           (lines[1][0] <= x && y<=lines[1][1])&&(lines[2][0] <= x && y<=lines[2][1]) ||
           (lines[2][0] <= x && y<=lines[2][1])&&(lines[0][0] <= x && y<=lines[0][1]))
        {
            answer++;
        }
    }
    return answer;
}

lines길이는 3이니까

처음엔 그냥 한칸씩 각 선분들이 겹치는가를 구했다.

근데 테스트 케이스는 통과해도 채점할 때 7,10번 빼고

런타임 에러가 발생해서 다시 생각해야했다...

function solution(lines) {
    let answer = 0 
    let minX = 0;
    let maxY = 0;
    
    lines.forEach(([x,y])=> {
        minX = x < minX ? x : minX
        maxY = y > maxY ? y : maxY
    })
    
    for(let x = minX; x < maxY; x++){
        let cnt = 0;
        let y = x+1;
        lines.forEach(([a,b])=>{
            if(a <= x && y <= b){
                cnt++;
            }
        })
        if(cnt>1){
            answer++;
        }
    }
    return answer;
}

계속 해보는데 런타임에러가 나서 뭐지 했는데

maxY = y > maxY ? y : minY

이부분에 오타가 있어서 런타임 에러가 발생했던것 이였다..

첫번째랑 두번째 둘다 잘 통과된다.

profile
멍청이

0개의 댓글