https://school.programmers.co.kr/learn/courses/30/lessons/87377?language=javascript
각 라인들의 교차점들을 전부 구한 다음 결과값이 도출하는게 포인트, 두 라인의 교차점은 0 ~ 1 개이다. (평행하거나 그렇지 않거나)
뭐 문제 안에 참고사항으로 교차점 구하는 공식을 넣어놨더라. 걍 요거대로 코딩하면 됨.
개인적으로는 교차점 구하는게 핵심이라 생각하고, 공식을 알든 모르든 교차점 구하는 걸 고민하는게 * 을 그리는 것보다 더 교육적으로 좋을 것 같다고 생각함.
모든 프로그래머스 문제 관련 코드들은 GitHub 링크 에 있음.
<script>
function solution(line) {
let stars = [];
let minX = null;
let minY = null;
let maxX = null;
let maxY = null;
for (let i = 0; i < line.length - 1; i++) {
const l1 = line[i];
for (let j = i + 1; j < line.length; j++) {
const l2 = line[j];
const x = ((l1[1] * l2[2]) - (l1[2] * l2[1])) / ((l1[0] * l2[1]) - (l1[1] * l2[0]));
const y = ((l1[2] * l2[0]) - (l1[0] * l2[2])) / ((l1[0] * l2[1]) - (l1[1] * l2[0]));
if (Number.isInteger(x) && Number.isInteger(y)) {
if (minX === null || x < minX) {
minX = x;
}
if (maxX === null || x > maxX) {
maxX = x;
}
if (minY === null || y < minY) {
minY = y;
}
if (maxY === null || y > maxY) {
maxY = y;
}
stars.push({x, y});
}
}
}
maxX -= minX;
maxY -= minY;
stars = stars.map(star => {
return {
x: star.x - minX,
y: Math.abs(maxY - (star.y - minY))
};
});
let result = (new Array(maxY + 1)).fill([]);
result = result.map(r => (new Array(maxX + 1)).fill('.'));
stars.map(star => {
result[star.y][star.x] = '*';
});
return result.map(r => {
return r.join('');
});
}
</script>