[JS] 교점에 별 만들기
FrontEnd/프로그래머스

[JS] 교점에 별 만들기

728x90

수학적 지식이 약간(?) 필요한 구현 문제였다.

 

모든 선분간의 교점을 구한 이후, x,y가 둘다 정수인 경우에만 별을 그려주면 되는 문제였다.

 

각 선분간의 교점을 구하는 식이 주어졌으니

위 식을 그대로 사용해서 교점을 구해주었다.

 

 

이후 X,Y의 각 최대,최소값을 구해 주어서 그래프에 그리기 쉽도록 표현해주었다.

 

단, 일반적인 수학 그래프는 위로 가는데 배열에서는 아래로 가는 구조이므로 마지막에 reverse() 함수를 취해주어서 위아래를 반전시켜주어서 문제를 해결하였다.

 

 

 

function solution(line) {
    
    const cod = []
    
    for (let i = 0; i < line.length ; i++) {
        for (let j = i ; j < line.length ; j++){
            const [A,B,E] = line[i]
            const [C,D,F] = line[j]
            if (A*D-B*C === 0) continue
            const x = (B*F-E*D)/(A*D-B*C)
            const y = (E*C-A*F)/(A*D-B*C)
            if (Number.isInteger(x) && Number.isInteger(y)) cod.push([x,y])
        }
    }
    cod.sort((a,b) => a[0]-b[0])
    const [minX,maxX] = [ cod[0][0] , cod[cod.length-1][0] ]
    cod.sort((a,b) => a[1]-b[1])
    const [minY,maxY] = [ cod[0][1] , cod[cod.length-1][1] ]
    
    const ret = [ ... new Array(maxY-minY+1)].map(_ => [... new Array(maxX-minX+1)].fill("."))
    for (const [x,y] of cod) {
        ret[y-minY][x-minX] = "*"
    }
    return ret.map(el => el.join("")).reverse()
}
728x90

'FrontEnd > 프로그래머스' 카테고리의 다른 글

[JS] 빛의 경로 사이클  (0) 2023.06.10
[JS] 전력망을 둘로 나누기  (0) 2023.06.09
[JS] 피로도  (0) 2023.06.08
[JS] K진수에서 소수 개수 구하기  (0) 2023.06.08
[JS] 주차요금 계산  (0) 2023.06.08