개발자 톡
연습문제 톡
[HSAT 2회 정기 코딩 인증평가 기출] 사물인식 최소 면적 산출 프로그램
JS
- 등록일
- 2024-11-18 10:19:32
- 조회수
- 112
- 작성자
- vavoya6324
const fs = require('fs'); const input = fs.readFileSync('input.txt', 'utf8').trim().split(/\n+/); const [N, K] = input[0].split(/\s+/).map(Number); const problems = input.slice(1).map(line => line.trim().split(/\s+/).map(Number)); const colorPositionList = Array.from({length: K + 1}, () => []) let start problems.forEach(problem => { const [x, y, color] = problem colorPositionList[color].push([x, y]) }) let minSize = Number.MAX_SAFE_INTEGER // 0: 탑, 1: 바텀, 2: 오른, 3: 왼 const top = 0 const bottom = 1 const right = 2 const left = 3 const array = Array.from({length: K + 1}, () => [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER, Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER]) function dfs(color) { colorPositionList[color].forEach(position => { // 이전 색상 까지의 위치보다 갱신되어야하면 if (position[1] > array[color - 1][top]) { array[color][top] = position[1] } else { array[color][top] = array[color - 1][top] } if (position[1] < array[color - 1][bottom]) { array[color][bottom] = position[1] } else { array[color][bottom] = array[color - 1][bottom] } if (position[0] > array[color - 1][right]) { array[color][right] = position[0] } else { array[color][right] = array[color - 1][right] } if (position[0] < array[color - 1][left]) { array[color][left] = position[0] } else { array[color][left] = array[color - 1][left] } // 다음 색이 없으면 if (color === K) { //console.log("현재까지 배열", array) minSize = Math.min(minSize, Math.abs((array[color][top] - array[color][bottom]) * (array[color][right] - array[color][left]))) //console.log("최소 넓이", minSize, Math.abs((array[color][top] - array[color][bottom]) * (array[color][right] - array[color][left]))) } else if (Math.abs((array[color][top] - array[color][bottom]) * (array[color][right] - array[color][left])) < minSize) { dfs(color + 1) } }) } dfs(1) console.log(minSize) /* 입력 크기 작고, 시간 많다 => 모든 경우를 계산해라 */
#[HSAT_2회_정기_코딩_인증평가_기출]_사물인식_최소_면적_산출_프로그램
#js