문제명 : 프로젝트 매니징
문제
프로젝트를 완수하기 위해서는 N개의 기능이 추가로 개발되어야 한다.
각 기능에는 1번부터 N번까지 번호가 붙어있고, i번째 기능을 개발하는데는 ci 분의 시간이 걸린다.
플레이어가 작업을 시작한 시각은 T시 M분이다.
한 기능을 끝마치면 바로 다음 기능의 개발을 시작한다.
모든 기능 개발을 끝마친 시각을 구하라.
입력
첫째 줄에 필요한 기능의 갯수 N이 주어진다.
둘째 줄에 두 정수 T, M이 공백을 두고 주어지며, 이는 현재 시각이 T시 M분임을 의미한다.
다음 N개의 줄에는 정수 ci가 주어진다. i번째 기능을 개발하는데는 ci분의 시간이 걸린다.
제약조건
입출력
예시1
입력
3
10 10
50
22
23
출력
11 45
예시2
입력
4
23 40
1000
1000
880
20
출력
0 0
풀이
const readline = require('readline');
let rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let isStart = false;
let needWork = undefined;
let doneWork = 0
let input = [];
rl.on('line', (line) => {
if (isStart && isNaN(line)) {
input.push(line)
} else if (isStart){
input.push(line)
doneWork++
if (doneWork === needWork) {
rl.close()
}
}
if (!isStart) {
needWork = +line
isStart = true
}
});
rl.on('close', () => {
let [T, M] = input.shift().split(" ").map(n => +n)
input = input.map(n => +n)
for (let worktime of input) {
let workedT = 0
let workedM = 0
if (worktime >= 60) {
workedT = Math.floor(worktime / 60)
workedM = worktime % 60
} else {
workedM = worktime % 60
}
T = T + workedT
M = M + workedM
if (M >= 60) {
T = T + 1
M = M % 60
}
if (T >= 24) {
T = T % 24
}
}
console.log(T, M)
})
readline으로 입력을 받는 과정을 처리하는 것이 매우 껄끄러웠다.
가장 먼저 입력받는 것이 각 프로젝트의 작업 갯수이므로,
첫 line 입력 시 프로젝트 작업 갯수를 기억하고, isStart를 true로 한다. needWork라는 카운터를 N으로 설정한다.
작업시작시간은 10 10과 같이 숫자로 변환할 수 없는 문자열로 입력되므로, isNaN을 활용해 작업시작시간을 판별한다.
이후 작업 시간이 N번만큼 입력되므로, 작업 시간이 기록될때마다 doneWork라는 카운터를 1씩 증가시킨다.
입력 받는 도중, needWork와 doneWork가 같아지는 시점에서 입력을 close 한다.
close에서는 입력받은 작업시작시간과 N개의 작업 시간을 이용해 작업 종료시간을 계산한다.
작업 시간은 분단위로 입력되므로, 1000분이나 10000분이 입력될 수도 있다.
따라서 시간 단위는 나누기 60으로 구분하고, 분 단위는 모듈로 60으로 구분한다.
이 후 현 시간의 시, 분과 작업시간의 시, 분을 각각 더한다.
먼저, 분부터 계산한다.
workedM은 최대 59가 할당될 것이다.
M도 최대 59가 할당될 것이다.
둘을 더한 값은 최대 118분, 1시간 58분이다.
따라서 60을 초과하였다면 T를 1 증가시키고, 모듈로 60을 통해 분을 계산한다.
다음으로 시를 계산한다.
시간에는 따로 올려줄 값이 없으므로,
T가 24보다 크다면 모듈로 24로 남은 값을 날려버린다.
'코테 문제 풀이' 카테고리의 다른 글
[Node.js] 구름톤 챌린지 1주 Day3 풀이 (0) | 2023.08.16 |
---|---|
[백준 12789] 도키도키 간식드리미 (Node.js) - 스택, 큐 (0) | 2023.08.15 |
[백준 1074] Z (Node.js) - 분할정복 (0) | 2023.05.30 |
[백준 4779] 칸토어 집합 (Node.js) - 분할정복 (0) | 2023.05.30 |
[백준 18870] 좌표 압축 (Node.js) (0) | 2023.05.19 |