BOJ[10162] - 전자레인지 by JavaScript
전자레인지
문제
언어
- JavaScript
순서도
- 제시된 3 개의 버튼으로 T 초를 맞출 수 없는지 검사
- 주어진 T 초를 몇 분으로 구성되어있는지, 몇 초로 구성되어 있는지 계산
- 계산한 분으로 A 버튼의 횟수를 먼저 계산
- 계산한 분으로 B 버튼의 횟수를 계산
- 계산한 초로 C 버튼의 횟수를 계산
문제 풀이 step 1
- 버튼 A, B, C 에 지정된 시간은 각각 5 분, 1 분, 10 초입니다.
- 주어진 시간 T 에 대해서 A, B, C 를 누른 횟수의 합이 최소가 되도록 해야 합니다.
- 최소가 되도록 하기 위해서는 가장 많은 시간을 차지하는 버튼을 최대한으로 누르고, 그 다음으로 많은 시간을 차지하는 버튼을 최대한으로 누르는 방식 즉, 그리디 알고리즘 형식으로 풀어야 합니다.
- 따라서 주어진 시간에 대해서 최대한 A 버튼을 누를 수 있는 횟수를 구하고, A 버튼을 누르고 난 후 나머지 시간에 대해서 최대한 B 버튼을 누를 수 있는 횟수를 구하고, B 버튼을 누르고 난 후 나머지 시간에 대해서 C 버튼을 누를 수 있는 횟수를 구하면 됩니다.
- 그리고 제시된 3 개의 버튼으로 T 초를 맞출 수 없으면 -1 을 출력하라고 되어 있는데, 이는 가작 작은 시간의 버튼인 C 버튼으로 나머지 연산을 해서 0 이 나오지 않으면 -1 을 출력하면 됩니다.
- 각 버튼에 대해서 횟수를 구하고 출력하면 정답이 됩니다.
- 추가 설명은 주석에 작성하겠습니다.
소스 코드
const input = require("fs")
.readFileSync("/dev/stdin")
.toString()
.trim()
.split("\n");
const solution = (input) => {
const T = Number(input[0]);
// 제시된 3개의 버튼으로 T초를 맞출 수 없는 경우
if (T % 10 !== 0) return -1;
// 주어진 요리시간 T 가 몇 분 몇 초 로 구성되어 있는지 계산
let m = parseInt(T / 60);
let s = T % 60;
// 시간이 큰 버튼부터 차례대로 횟수 계산
const a = parseInt(m / 5);
const b = m % 5;
const c = s / 10;
return `${a} ${b} ${c}`;
};
console.log(solution(input));