Notice
Recent Posts
Recent Comments
Link
관리 메뉴

윤일무이

[JavaScript] 구름톤 챌린지 1주차 코딩테스트 : 프로젝트 매니징 본문

⚙️ 코딩테스트

[JavaScript] 구름톤 챌린지 1주차 코딩테스트 : 프로젝트 매니징

썸머몽 2023. 8. 16. 10:49
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