구름톤 챌린지는 구름에서 진행하는 챌린지이다!
매일 오전 10시에 알고리즘 문제가 주어지고 주어진 시간 내에 문제를 수행하면 된다.
48시간 내에 주어진 문제를 해결하면 블록을 얻을 수 있는데, 모두 모으면 오프라인 챌린지까지 참여할 수 있는 기회가 생겨서 참여하게 되었다. 물론 랜덤으로 뽑히는 거 같긴하지만 그래도 뽑히면 완전 좋으니깐!
알고리즘에 취약하기도 하고, 아직 취준생이라 피할 수 없는 코딩 테스트를 준비하기 위한 나를 위한 챌린지가 아닐까라고 생각했다. 아직 3개의 문제만 풀어서, 난이도는 쉽다 ~ 중간 정도로 느끼고 있는데 점점 어려워질 거 같다..
미션을 해결하지 못해도 다음날 오전 10시에 해설지가 제공이 되는데 무지 친절하다.
해설지도 되게 도움이 많이 될거 같은 기분이 들었다!
나는 시간 계산과 같은 수학적인 계산에 되게 약한데, 구름톤 챌린지에서 제공해준 해설지를 기억해두면 좋을 것 같아서 학습일기를 남긴다.
2일차 문제는 아래와 같다.
PM이 된 플레이어는 현재 시간에서 N개의 기능 개발에 필요한 시간을 정리하고 있다. 기능 개발에 필요한 시간은 모두 분 으로 제공되고 모든 기능이 완성되었을 때, 현재 시간이 몇 시인지 알아내면 되는 문제였다.
입력값은 아래와 같다.
3 // 기능 개수
10 10 // 현재 시각
50 // 기능을 개발하는데 드는 시간
22 // 기능을 개발하는데 드는 시간
23 // 기능을 개발하는데 드는 시간
참고로 한 기능 개발이 끝나야 다음 기능 개발이 가능하다.
내가 문제를 해결했던 코드는 아래와 같다.
const readline = require('readline');
let rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let input = [];
rl.on('line', (line) => {
input.push(line);
});
rl.on('close', () => {
let [N, start] = input;
let [T, M] = start.split(' ');
N = Number(N);
T = Number(T);
M = Number(M);
for (let i = 2; i < 2 + N; i++) {
M += Number(input[i]);
T += Math.floor(M / 60);
M = M % 60;
if (T >= 24) T -= 24;
}
console.log(T + ' ' + M);
rl.close();
});
하지만 해설을 보았을 때, 해당 접근방법이 더 깔끔한 거 같아서 가져왔다.
완전한 코드를 올려도 되는지 모르겠어서 일부만 발췌했다ㅠ
포인트는 분은 분끼리 더한 후 50으로 나눈 나머지가 현재 분이되고,
시는 분을 시로 나눈 뒤, 시끼리 더한 후 24로 나눈 나머지가 현재 시가 된다는 점이였다.
// 현재 분에서, 비용 분만큼 더한 후, 60으로 나눈 나머지가 결과 분이다.
let tempMinute = currentMinute + costMinute;
let resultMinute = tempMinute % 60;
// 현재 시에서, 비용 분을 60으로 나는 몫만큼 더한 후, 24로 나눈 나머지가 결과 시이다.
let resultHour = (currentHour + Math.floor(tempMinute/60)) % 24;
참고자료
- 구름톤 프로젝트 매니징 자료
질문이나 잘못된 점은 댓글로 남겨주세요 :)💖
'etc > [구름] 구름톤 챌린지' 카테고리의 다른 글
구름톤 챌린지 4주차 학습 일기 - BFS(모든 섬 방문하는 문제) (0) | 2023.09.06 |
---|---|
구름톤 챌린지 3주차 학습 일기 - DP(동적 계획법) (2) | 2023.08.29 |
구름톤 챌린지 2주차 학습 일기 v2 (2차원 배열 완전 탐색, dx/dy 기법) (0) | 2023.08.23 |
구름톤 챌린지 2주차 학습 일기 (0) | 2023.08.22 |
구름톤 챌린지 1주차 학습 일기 v2 (0) | 2023.08.20 |
댓글