728x90
📌 문제
플레이어는 구름 프로젝트의 일정을 관리하는 PM(프로젝트 매니저)이자 유일한 개발자다. 현재 구름 프로젝트를 완수하기 위해서는 개의 기능 개발이 추가로 필요하다. 각 기능에는 1 번부터 N 번까지 번호가 붙어 있고, i번째 기능을 개발하는 데는 Ci분의 시간이 걸린다.
플레이어는 프로젝트를 기한 안에 끝내기 위해 철야 작업에 들어갔다. 플레이어가 철야 작업을 시작한 시각은 시 분이다. 플레이어는 1번 기능부터 순서대로 개발을 진행하고, 한 기능 개발을 끝마치면 바로 다음 기능의 개발을 시작한다. 플레이어가 모든 기능 개발을 끝마친 시각을 구해보자.
📌 입력
첫째 줄에 필요한 기능의 개수 N이 주어진다.
둘째 줄에 두 정수 T, M 이 공백을 두고 주어진다. 이는 현재 시각이 T시 M분임을 의미한다.
다음 N개의 줄에는 정수 Ci가 주어진다. i번째 기능을 개발하는 데는 Ci분의 시간이 걸린다.
📌 출력
구름 프로젝트가 완료된 시각의 시와 분을 공백을 두고 출력하시오.
23시 59분에서 1분 이 지난 시은 0시 0분이다.
📌 예제 입출력
📌 풀이
알아야 하는 것
- 입력을 언제까지 받을 것인가?
구할 것
- 첫 줄에 필요한 기능의 개수, 둘째 줄에 현재 시간 이후 들어오는 프로젝트의 시간들을 reduce를 사용해 다 더한다.
- 이를 time이라고 할 때, 현재 시간의 분과 더해준다. 분으로 표기하기 위해서 이 합이 60 이상이라면 나머지만 남도록 60으로 나눈 나머지를 answerMinute라고 한다. 예컨대 합한 것이 10+35로 45라면 그냥 45가 남지만, 10+50이라면 60으로 60분이라는 표기법을 피하기 위해 나눌 때, 0이 나오는 것이다.
- answerHour도 비슷하게 하되, 분의 개념을 챙겨야 한다. 위에서 0이 나오게 되면 이 말은 몫이 있다는 것이고 그 몫만큼 시를 증가시켜야 한다. 따라서 m+time/60을 하면 올려야 하는 시의 수를 알 수 있고, 여기에 현재 시간인 h를 더해준다. 이 때 시도 24이상이면 0시부터 시작해야 하기 때문에 24로 나눈 나머지를 찍어준다. 이 때 소수점이 나오게 되는데 시에서 소수점이 있다는 건 버려야 하기 때문에 Math.floor를 사용했다.
const readline = require('readline');
let rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let input = [];
rl.on('line', (line) => {
input.push(line)
if (input.length === Number(input[0]) + 2) {
rl.close();
}
});
rl.on('close', () => {
const n = Number(input[0]);
const [h, m] = input[1].split(" ").map(Number);
const remainingWork = input.slice(2).map(line => Number(line));
let time = remainingWork.reduce((acc, cur) => acc+cur, 0)
let answerMinute = (m+time)%60;
let answerHour = Math.floor((h+(m+time)/60)%24);
console.log(answerHour, answerMinute)
})
6개월 전에 백준에서 이와 똑같은 문제를 풀었었던 기억이 있다. 아주 흔한 유형의 문제인 것 같다.
728x90
'⚙️ 코딩테스트' 카테고리의 다른 글
[JavaScript] 구름톤 챌린지 1주차 코딩테스트 : 완벽한 햄버거 만들기 (0) | 2023.08.21 |
---|---|
[JavaScript] 구름톤 챌린지 1주차 코딩테스트 : 합 계산기 (0) | 2023.08.17 |
[JavaScript] 구름톤 챌린지 1주차 코딩테스트 : 운동 중독 플레이어 (0) | 2023.08.16 |
[JavaScript] 프로그래머스 코딩테스트 레벨 2 : 숫자의 표현 (0) | 2023.08.10 |
[JavaScript] 프로그래머스 코딩테스트 레벨 2 : 게임 맵 최단거리 (0) | 2023.08.08 |