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 |