알고리즘/문제풀이

[JavaScript][node.js] 백준 18111 마인크래프트

2024. 1. 8. 15:00
목차
  1. 문제
  2. 최종코드
  3. 인사이트

문제

https://www.acmicpc.net/problem/18111

 

18111번: 마인크래프트

팀 레드시프트는 대회 준비를 하다가 지루해져서 샌드박스 게임인 ‘마인크래프트’를 켰다. 마인크래프트는 1 × 1 × 1(세로, 가로, 높이) 크기의 블록들로 이루어진 3차원 세계에서 자유롭게

www.acmicpc.net

자바스크립트(node.js)로 풀이했습니다.

최종코드

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';

const input = fs.readFileSync(filePath).toString().trim().split('\n');
const [n, m, b] = input[0].split(' ');

const soils = [];
input.slice(1).forEach((line) => {
  soils.push(...line.split(' ').map(Number));
});
const soilCounts = new Array(257).fill(0);
soils.forEach((soil) => (soilCounts[soil] += 1));

const checkTime = (h, inventory) => {
  let time = 0;
  for (const soil in soilCounts) {
    if (h > soil) {
      time += soilCounts[soil] * (h - soil);
      inventory -= soilCounts[soil] * (h - soil);
    } else if (h < soil) {
      time += 2 * soilCounts[soil] * (soil - h);
      inventory += soilCounts[soil] * (soil - h);
    }
  }
  if (inventory < 0) {
    return Infinity;
  }
  return time;
};

let minTime = Infinity;
let maxHeight = 0;
for (let height = 0; height <= 256; height++) {
  const finalTime = checkTime(height, b);

  if (finalTime < minTime) {
    minTime = finalTime;
    maxHeight = height;
  } else if (finalTime === minTime) {
    if (maxHeight < height) {
      maxHeight = height;
    }
  }
}

console.log(minTime, maxHeight);

인사이트

  • 비둘기집의 원리 기억하자! 땅의 높이는 0 ~ 256 사이의 값이므로 500 * 500 순회를 256 순회로 줄일 수 있다.
  • 배열의 총 길이를 알고 그 배열을 0으로 채우고 싶은 경우
    • new Array(N).fill(0);
  • 배열의 각 요소를 number형으로 바꾼 새로운 배열을 얻고 싶은 경우
    • arr.map(Number);
  • 배열은 const로 만들어도 값 변경 가능

'알고리즘 > 문제풀이' 카테고리의 다른 글

[JavaScript][node.js] 백준 1327 소트 게임  (1) 2024.02.09
[JavaScript][node.js] 프로그래머스 피로도  (2) 2024.02.07
[JavaScript][node.js] 백준 1406 에디터  (1) 2024.02.01
[JavaScript][node.js] 백준 11053 가장 긴 증가하는 부분 수열  (1) 2024.01.26
[JavaScript][node.js] 백준 14940 쉬운 최단거리  (0) 2024.01.09
  1. 문제
  2. 최종코드
  3. 인사이트
'알고리즘/문제풀이' 카테고리의 다른 글
  • [JavaScript][node.js] 프로그래머스 피로도
  • [JavaScript][node.js] 백준 1406 에디터
  • [JavaScript][node.js] 백준 11053 가장 긴 증가하는 부분 수열
  • [JavaScript][node.js] 백준 14940 쉬운 최단거리
햄oOoOo
햄oOoOo
FE
햄oOoOo
디자인보다 개발이 더 좋아
햄oOoOo
전체
오늘
어제
  • 분류 전체보기 (75)
    • 프로젝트 (6)
      • 소프티어 부트캠프 (1)
      • GDSC (0)
      • FRONTLINE (2)
      • 우테코 프리코스 (3)
    • TIL (47)
      • Git (2)
      • Web (5)
      • 디자인시스템 (2)
      • HTML + CSS (3)
      • JavaScript (9)
      • TypeScript (5)
      • React (6)
      • Node.js (1)
      • 테스트 (2)
      • 디자인패턴 (1)
      • 네트워크 (9)
      • 운영체제 (1)
      • DevOps (1)
      • ETC (0)
    • 알고리즘 (19)
      • 문제풀이 (7)
      • 자료구조 (3)
      • 알고리즘 개념 (6)
      • 코딩테스트 (3)
    • 개발일기 (3)
    • 회사일기 (0)

인기 글

태그

  • 렉시컬 환경
  • Typescript
  • javascript
  • 브라우저 렌더링
  • Stack
  • 실행 컨텍스트
  • 우테코
  • HTTP
  • 모든 개발자를 위한 HTTP 웹 기본 지식
  • 렌더링
  • node.js
  • 웹 접근성
  • 프로토타입 체인
  • useEffect
  • 알고리즘
  • virtual DOM
  • bfs
  • React
  • 이펙티브 타입스크립트
  • 네트워크
hELLO · Designed By 정상우.
햄oOoOo
[JavaScript][node.js] 백준 18111 마인크래프트
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.