[구름톤 챌린지] 1주차_프로젝트 매니징
필요한 개념
- 단순 구현
- 정수
- Math
문제 분석
PM이 된 플레이어는 현재 시간에서 N개의 기능 개발에 필요한 시간을 정리하고 있다.
기능 개발에 필요한 시간은 모두 분 으로 제공되고 모든 기능이 완성되었을 때, 현재 시간이 몇 시인지 알아내면 되는 문제이다.
데이터 입력 받기
데이터를 입력받기 위해서는 readline 모듈을 사용하면 된다.
line 이벤트가 입력이 종료될 때까지 받는다고 하지만 만약에 마지막 입력된 데이터에 줄바꿈이 없다면 마지막 데이터가 들어오지 않는다.
그래서 확실하게 해주기 위해 입력된 데이터가 목표치가 되면 강제적으로 close() 이벤트를 호출하도록 작성한다.
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let input = [];
rl.on('line', (line) => {
input.push(line.trim());
//실제로 데이터는 주어진 N+2줄 입력이 되고, input의 길이가 N+2만큼 되면 close를 호출한다.
if (input.length === Number(input[0]) + 2){
rl.close();
}
})
시간 계산하기
- 100분 = 1시간 40분
- 1,000분 = 16시간 40분
- 분은 분까리 더한 후, 60으로 나눈 나머지가 현재 분이 된다.
- 시는 분을 시로 나눈 뒤, 시끼리 더한 후 24로 나눈 나머지가 현재 시가 된다.
// 현재 분에서, 비용 분만큼 더한 후, 60으로 나눈 나머지가 결과 분이다.
let tempMinute = currentMinute + costMinute;
let resultMinute = tempMinute % 60;
// 현재 시에서, 비용 분의 60으로 나눈 몫만큼 더한 후, 24로 나눈 나머지가 결과 시이다.
let resultHour = (currentHour + Math.floor(tempMinute/60)) % 24;
필요한 기능이 1개면 굳이 계산할 필요가 없지만 필요한 기능은 N개 이다.
즉, 주어지는 N개의 기능에 대해서 시간으로 변환을 해준 뒤, 현재 시간에 더하면 된다.
이때, 24시간을 넘어간다면 다시 0시로 돌아가면 된다.
이 계산법을 N개의 기능에 모두 적용하면 해결된다.
rl.on('close', () => {
let N = Number(input[0]);
// 현재 시와, 현재 분
let [currentHour, currentMinute] = input[1].split(' ').map(Number);
for (let i = 0 ; i < N ; i++){
// 비용 분을 꺼내오기, 비용 분은 input 데이터의 2번째 부터 있다.
let costMinute = Number(input[i+2]);
let tempMinute = currentMinute + costMinute;
let resultMinute = tempMinute % 60;
let resultHour = (currentHour + Math.floor(tempMinute/60)) % 24;
currentHour = resultHour;
currentMinute = resultMinute;
}
console.log(currentHour, currentMinute);
});
자바 스프링 & 리액트 풀스택 개발자 양성 과정에 참여한지도 벌써 3개월차에 접어들었다.
현재 참여하고 있는 교육 주최 기관인 구름에서 진행하는 구름톤 챌린지를 시작해서 당연히! 참여 신청했다.
구름톤 챌린지는 구름LEVEL 에서 매일 오전 10시에 공개되는 알고리즘 문제를 48시간 안에 해결하면 된다.
4주동안 다양한 유형의 문제를 실제 코딩테스트처럼 참여해볼 수 있고, 4가지 언어(Python, JavaScript, Java, C++)해설지도 제공해주니 참여하지 않을 이유가 없다.
나는 자바스크립트로 챌린지에 참여하면서 어려웠던 점이나 복습이 필요한 문제를 기록하면서 내 것으로 만들어 나가야 겠다.