개발자 톡
연습문제 톡
[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