반응형
https://www.acmicpc.net/problem/2525
문제
KOI 전자에서는 건강에 좋고 맛있는 훈제오리구이 요리를 간편하게 만드는 인공지능 오븐을 개발하려고 한다. 인공지능 오븐을 사용하는 방법은 적당한 양의 오리 훈제 재료를 인공지능 오븐에 넣으면 된다. 그러면 인공지능 오븐은 오븐구이가 끝나는 시간을 분 단위로 자동적으로 계산한다.
또한, KOI 전자의 인공지능 오븐 앞면에는 사용자에게 훈제오리구이 요리가 끝나는 시각을 알려 주는 디지털 시계가 있다.
훈제오리구이를 시작하는 시각과 오븐구이를 하는 데 필요한 시간이 분단위로 주어졌을 때, 오븐구이가 끝나는 시각을 계산하는 프로그램을 작성하시오.
입력
첫째 줄에는 현재 시각이 나온다. 현재 시각은 시 A (0 ≤ A ≤ 23) 와 분 B (0 ≤ B ≤ 59)가 정수로 빈칸을 사이에 두고 순서대로 주어진다. 두 번째 줄에는 요리하는 데 필요한 시간 C (0 ≤ C ≤ 1,000)가 분 단위로 주어진다.
출력
첫째 줄에 종료되는 시각의 시와 분을 공백을 사이에 두고 출력한다. (단, 시는 0부터 23까지의 정수, 분은 0부터 59까지의 정수이다. 디지털 시계는 23시 59분에서 1분이 지나면 0시 0분이 된다.)
예제 입력 1 복사
14 30
20
예제 출력 1 복사
14 50
예제 입력 2 복사
17 40
80
예제 출력 2 복사
19 0
예제 입력 3 복사
23 48
25
예제 출력 3 복사
0 13
이번 문제는 애를 약간 먹었습니다. 생각했던 로직은 같고 예제 입력값들을 넣었을 때도 출력값이 잘 나왔는데 제출할 때는 틀렸다고 나오더군요.. 사실 아직도 뭐가 잘못되었었는지 모르겠지만.. 어쨋든 새로운 코드로 작성했을 때 더 간결하고 보기 쉬운 것 같다는 생각은 드네요. 이렇게 막무가내로 알고리즘을 풀어본다고 도움이 될까 생각도 들긴 하지만.. 그래도 사고 하는 연습을 한다고 생각하고 계속 도전해 보겠습니다. 그럼 각설하고 바로 설명으로 들어가 보기 전에!
이 문제를 풀기 위해서 제가 생각했던 로직은 이렇습니다:
- 요리를 시작하는 시간 + 요리 시간이 60분 이상이다.
- 소요 된 시간을 구하여 요리 시작 시간에 더해준다.
- 총 소요 된 시간이 23시간을 넘을 경우 -24를 해준다.
- 총 소요 된 분이 60분일 경우 0을, 그 외에는 (시작 분 + 소요 분) % 60 을 해주어 나머지 값을 구한다. 이 값이 소요 된 분이 된다.
- 소요 된 시간을 구하여 요리 시작 시간에 더해준다.
- 요리를 시작하는 시간 + 요리 시간이 60분 미만이다.
- 총 소요 된 분이 60분 미만이라면 요리가 끝난 시간의 값은 시작 시간 값과 동일하다.
- 총 소요 된 분이 60분 미만이기에 요리 시작 분 + 요리 소요 분을 더해주면 된다.
제가 작성 한 코드는 이렇습니다.
const fs = require('fs');
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let input = fs.readFileSync(filePath).toString().trim().split('\n');
const startHour = Number(input[0].split(' ')[0]);
const startMinute = Number(input[0].split(' ')[1]);
const cookingTimeInMinutes = Number(input[1]);
let cookedHour = 0;
let cookedMinute = 0;
if (startMinute + cookingTimeInMinutes >= 60) {
const hoursTaken = Math.floor((startMinute + cookingTimeInMinutes) / 60);
cookedHour = hoursTaken + startHour > 23 ? hoursTaken + startHour - 24 : hoursTaken + startHour;
cookedMinute = startMinute + cookingTimeInMinutes === 60 ? 0 : (startMinute + cookingTimeInMinutes) % 60;
} else {
cookedHour = startHour;
cookedMinute = startMinute + cookingTimeInMinutes;
}
console.log(`${cookedHour} ${cookedMinute}`);
간단할 거라고 생각했던 것과 달리 상당한 시간을 소요했습니다. 중간에 다른 일을 하느라 온전히 집중해서 풀지는 못했지만 그래도 이 문제에 한시간 이상을 쏟은 것 같네요.. 더 정진해서 발전할 수 있도록 해야겠습니다.
그럼 다들 좋은 밤 보내시고 열공 하시기 바랍니다!
반응형
'Studying > Algorithms' 카테고리의 다른 글
[알고리즘 떠먹여 주는 남자] 백준 8393 - 합 for Node.js (0) | 2022.04.04 |
---|---|
[알고리즘 떠먹여 주는 남자] 백준 1157 - 단어 공부 for Node.js (0) | 2022.04.04 |
[알고리즘 떠먹여 주는 남자] 백준 2884 - 알람 시계 for Node.js (0) | 2022.04.02 |
[알고리즘 떠먹여 주는 남자] 백준 14681: 사분면 고르기 for Node.js (0) | 2022.03.13 |
[알고리즘 떠먹여 주는 남자] 백준 2753: 윤년 for Node.js (0) | 2022.03.13 |