알고리즘

방 배정하기

kimbyeongnyeon 2026. 1. 26. 19:31

방 배정하기

문제 설명

정보 초등학교 6학년 여학생들은 단체로 2박 3일 수학여행을 가기로 했다. 학생들이 묵을 숙소에는 방의 정원(방 안에 있는 침대 수)을 기준으로 세 종류의 방이 있으며, 같은 종류의 방들이 여러 개 있다. 정보 초등학교에서는 학생들에게 이 방들을 배정하되, 배정된 모든 방에 빈 침대가 없도록 하고자 한다.

예를 들어, 방의 종류가 5인실, 9인실, 12인실이고 6학년 여학생 전체가 113명 이라면, 5인실 4개, 9인실 5개, 12인실 4개를 예약하면 각 방에 남는 침대 없이 배정이 가능하다. 또한 12인실은 사용하지 않고 5인실 10개와 9인실 7개만 사용하는 것도 가능하다. 그러나 방의 종류가 3인실, 6인실, 9인실이고 6학년 여학생 전체가 112명이라면 빈 침대 없이 방을 배정하는 것은 불가능하다.

방의 정원을 나타내는 서로 다른 세 자연수와 전체 학생 수를 나타내는 자연수 하나가 주어졌을 때, 배정된 모든 방에 빈 침대가 없도록 방 배정이 가능한지를 결정하는 프로그램을 작성하시오. 단, 세 종류의 방은 모두 충분한 개수가 있다고 가정하며, 위의 예에서와 같이 세 종류의 방을 모두 활용하지 않고 한 종류 또는 두 종류의 방만 이용하여 배정하는 것도 허용한다.

예제 입력

5 9 12 113

예제 출력

1

문제 풀이

const fs = require("fs");
const path = require("path");
const input = fs
  .readFileSync(
    process.platform === "linux"
      ? "dev/stdin"
      : path.join(__dirname, "input.txt")
  )
  .toString()
  .trim()
  .split("\n");

const solution = (input) => {
  const [a, b, c, N] = input[0].split(" ").map(Number);
  let result = 0;
  for (let i = 0; i < 51; i++) {
    for (let j = 0; j < 51; j++) {
      for (let k = 0; k < 51; k++) {
        if (i * a + j * b + k * c === N) {
          result = 1;
        }
      }
    }
  }
  console.log(result);
};
solution(input);

아이디어

  1. 3중 for 문으로 탐색
  2. 입력값과 for 문 변수와 곱한 값을 더했을 때 N 이라면 방 배정 가능
  3. 아니라면 배정 불가

후기

코테 대비 문제 3

'알고리즘' 카테고리의 다른 글

셀프넘버  (0) 2026.01.26
분해합  (0) 2026.01.26
덩치  (0) 2026.01.26
0의 개수  (0) 2026.01.25
단어 변환  (0) 2026.01.25