Muscardinus

교점에 별 만들기 본문

알고리즘 문제/[프로그래머스] Lv2

교점에 별 만들기

Muscardinus 2022. 4. 6. 15:07
728x90

 

https://programmers.co.kr/learn/courses/30/lessons/87377

 

코딩테스트 연습 - 교점에 별 만들기

[[2, -1, 4], [-2, -1, 4], [0, -1, 1], [5, -8, -12], [5, 8, 12]] ["....*....", ".........", ".........", "*.......*", ".........", ".........", ".........", ".........", "*.......*"] [[0, 1, -1], [1, 0, -1], [1, 0, 1]] ["*.*"] [[1, -1, 0], [2, -1, 0], [4, -

programmers.co.kr

계획1 - 문제에 나온 공식대로 모든 정수 교차점과 좌표의 최대/최솟값을 구합니다.

계획2 - 너비와 높이를 계산 후, 별을 찍습니다.

function solution(line) {
    const point = [];
    let minX = Infinity;
    let minY = Infinity;
    let maxX = -Infinity;
    let maxY = -Infinity;
    for (let i = 0; i < line.length; i++) {
        for (let j = i + 1; j < line.length; j++) {
            const [a, b, e] = line[i];
            const [c, d, f] = line[j];
            const mod = a * d - b * c;
            if (mod === 0) continue;
            const x = b * f - e * d;
            const y = e * c - a * f;
            if (x % mod || y % mod) continue;
            point.push([y / mod, x / mod]);
            minX = Math.min(minX, x / mod);
            minY = Math.min(minY, y / mod);
            maxX = Math.max(maxX, x / mod);
            maxY = Math.max(maxY, y / mod);
        }
    }
    const answer = [...new Array(maxY - minY + 1)]
                .map(() => new Array(maxX - minX + 1).fill('.'));
    for (let i = 0; i < point.length; i++) {
        const [y, x] = point[i];
        answer[maxY - y][x - minX] = '*';
    }
    return answer.map((v) => v.join(''));
}
728x90

'알고리즘 문제 > [프로그래머스] Lv2' 카테고리의 다른 글

n^2 배열 자르기  (0) 2022.04.08
모음사전  (0) 2022.04.07
전력망을 둘로 나누기  (0) 2022.04.05
2개 이하 다른 비트  (0) 2022.04.05
피로도  (0) 2022.04.04
Comments