개발자 톡

연습문제 톡 [21년 재직자 대회 예선] 이미지 프로세싱

js

등록일
2024-11-15 17:47:09
조회수
28
작성자
vavoya6324


const fs = require('fs');
const input = fs.readFileSync('input.txt', 'utf8').trim().split(/\n+/);
const [H, W] = input[0].split(' ').map(Number);
const image = input.slice(1, H + 1).map(line => line.split(' ').map(Number));
const visited = Array.from({length: H}, () => Array.from({length: W}, () => -1))
const problemList = input.slice(2 + H)

function findAndChange(h, w, referColor, targetColor, visitedNum) {
    const stack = [[h, w]]
    // 방문 처리
    visited[h][w] = true

    while (stack.length > 0) {
        const [y, x] = stack.pop()
        // 색 변경
        image[y][x] = targetColor


        // 이제 좌우 상하 탐색
        // 상
        if (image[y + 1] && image[y + 1][x] === referColor && visited[y + 1][x] !== visitedNum) {
            // 방문 처리
            visited[y + 1][x] = visitedNum
            stack.push([y + 1, x])
        }
        // 하
        if (image[y - 1] && image[y - 1][x] === referColor && visited[y - 1][x] !== visitedNum) {
            // 방문 처리
            visited[y - 1][x] = visitedNum
            stack.push([y - 1, x])
        }
        // 좌
        if (image[y] && image[y][x - 1] === referColor && visited[y][x - 1] !== visitedNum) {
            // 방문 처리
            visited[y][x - 1] = visitedNum
            stack.push([y, x - 1])
        }
        // 우
        if (image[y] && image[y][x + 1] === referColor && visited[y][x + 1] !== visitedNum) {
            // 방문 처리
            visited[y][x + 1] = visitedNum
            stack.push([y, x + 1])
        }

    }

}

problemList.forEach((problem, i) => {
    const [h, w, c] = problem.split(' ').map(Number);
    const referColor = image[h - 1][w - 1]

    findAndChange(h - 1, w - 1, referColor, c, i);
})
console.log(image.map(line => line.join(' ')).join('\n'))

/*

 */
#[21년_재직자_대회_예선]_이미지_프로세싱
#js

이 카테고리의 톡 더보기