이번 문제는 N개의 프로젝트를 T시 M분에 시작하여 몇시에 일을 마무리할 수 있을지 시간을 계산하는 문제다.
let N = 0;
let T, M;
let work_t = [];
let count = 0;
const readline = require('readline');
let rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
rl.on('line', (line) => {
if (count == 0){
N = Number(line);
} else if (count == 1){
const time = line.split(' ');
T = Number(time[0]);
M = Number(time[1]);
} else {
work_t.push(Number(line));
}
count += 1;
if(count === N + 2) {
rl.close();
}
});
rl.on('close', () => {
let all_min = 0;
work_t.forEach((time)=>{
all_min += time;
});
all_min += M;
T += Math.floor(all_min / 60);
T %= 24;
M = all_min % 60;
console.log(T + " " + M);
});
설계
- 입력된 값을 N -> T,M -> cj(프로젝트당 걸리는 분) 순서대로 입력을 받는다.
- 분을 모두 더해서 시간으로 만들어준다.
- 모든 분에서 시간을 빼고 나머지를 분으로 만들어준다.
사용한 개념
배열에 요소 추가
- **Array.push**
- N개의 프로젝트의 시간을 저장하기 위해서는 몇개가 들어올지 모르는 시간을 담아 줄 수 있는 배열이 필요했다. 그래서 push 를 이용해서 걸리는 시간을 저장해주었다.
- Array.forEach
- 배열의 요소을 쉽게 접근할 수 있게 해준다. for같은 경우는 인덱스를 이용해서 접근해야하지만 forEach를 쓰면 인덱스로 배열의 요소를 접근해야하는 수고를 덜 수 있다.
배운점
일단 day1에서 풀었던 게 문제가 많다는 것을 느꼈다. 일단 readline을 처음 사용봐서 코드의 흐름에 이해도가 낮아서 rl.on 부분에서 모든것을 다하도록 했었는데 on 부분에서는 데이터의 저장만해주고 close 부분에서 입력을 한 값을 바탕으로 데이터 처리를 해야하는 것을 이번 과제로 알게 되었다.
하루를 구름톤의 코테로 시작하니까 좋다. 해야지해야지 했던 코테 준비를 이제야 제대로 시작할 수 있는 것 같아서 다행이다.
'코딩테스트' 카테고리의 다른 글
[C++, 코딩테스트] 프로그래머스 : 의상 with 해시 (0) | 2024.02.16 |
---|---|
[C++, 코딩테스트] 프로그래머스 : 큰 수 만들기 with 그리디 (0) | 2024.02.16 |
[C++, 코딩테스트] 프로그래머스 : 가장 먼 노드 (0) | 2024.02.16 |
[코딩테스트, C++, Softeer] 금고털이, 그리디 알고리즘 (0) | 2024.01.19 |
구름톤 챌린지 Week1, day1 (0) | 2023.08.15 |
이번 문제는 N개의 프로젝트를 T시 M분에 시작하여 몇시에 일을 마무리할 수 있을지 시간을 계산하는 문제다.
let N = 0;
let T, M;
let work_t = [];
let count = 0;
const readline = require('readline');
let rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
rl.on('line', (line) => {
if (count == 0){
N = Number(line);
} else if (count == 1){
const time = line.split(' ');
T = Number(time[0]);
M = Number(time[1]);
} else {
work_t.push(Number(line));
}
count += 1;
if(count === N + 2) {
rl.close();
}
});
rl.on('close', () => {
let all_min = 0;
work_t.forEach((time)=>{
all_min += time;
});
all_min += M;
T += Math.floor(all_min / 60);
T %= 24;
M = all_min % 60;
console.log(T + " " + M);
});
설계
- 입력된 값을 N -> T,M -> cj(프로젝트당 걸리는 분) 순서대로 입력을 받는다.
- 분을 모두 더해서 시간으로 만들어준다.
- 모든 분에서 시간을 빼고 나머지를 분으로 만들어준다.
사용한 개념
배열에 요소 추가
- **Array.push**
- N개의 프로젝트의 시간을 저장하기 위해서는 몇개가 들어올지 모르는 시간을 담아 줄 수 있는 배열이 필요했다. 그래서 push 를 이용해서 걸리는 시간을 저장해주었다.
- Array.forEach
- 배열의 요소을 쉽게 접근할 수 있게 해준다. for같은 경우는 인덱스를 이용해서 접근해야하지만 forEach를 쓰면 인덱스로 배열의 요소를 접근해야하는 수고를 덜 수 있다.
배운점
일단 day1에서 풀었던 게 문제가 많다는 것을 느꼈다. 일단 readline을 처음 사용봐서 코드의 흐름에 이해도가 낮아서 rl.on 부분에서 모든것을 다하도록 했었는데 on 부분에서는 데이터의 저장만해주고 close 부분에서 입력을 한 값을 바탕으로 데이터 처리를 해야하는 것을 이번 과제로 알게 되었다.
하루를 구름톤의 코테로 시작하니까 좋다. 해야지해야지 했던 코테 준비를 이제야 제대로 시작할 수 있는 것 같아서 다행이다.
'코딩테스트' 카테고리의 다른 글
[C++, 코딩테스트] 프로그래머스 : 의상 with 해시 (0) | 2024.02.16 |
---|---|
[C++, 코딩테스트] 프로그래머스 : 큰 수 만들기 with 그리디 (0) | 2024.02.16 |
[C++, 코딩테스트] 프로그래머스 : 가장 먼 노드 (0) | 2024.02.16 |
[코딩테스트, C++, Softeer] 금고털이, 그리디 알고리즘 (0) | 2024.01.19 |
구름톤 챌린지 Week1, day1 (0) | 2023.08.15 |