[큐시즘스터디 2주차] 코테를 위한 자바스크립트(6)

냐옹·2023년 9월 10일
0

스터디

목록 보기
6/14

사고 전환의 필요성..

백준 2025번

처음 풀이

const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");

const time = {
  hour: Number(input[0].split(" ")[0]),
  min: Number(input[0].split(" ")[1]),
};

const takeTime = Number(input[1]);

function getFinishTime(takeTime) {
  const timeAdd = {
    hour: Number(0),
    min: takeTime,
  };

  if (takeTime >= 60) {
    timeAdd.hour = Number((takeTime / 60).toFixed(0));
    timeAdd.min = takeTime % 60;
  } else {
    // takeTime이 분단위
    // do nothingclear
  }

  return timeAdd;
}

const calculatedTime = getFinishTime(takeTime);

const result = {
  hour: Number(0),
  min: Number(0),
};

if (time.hour + calculatedTime.hour >= 24) {
  result.hour = time.hour + calculatedTime.hour - 24;
  if (time.min + calculatedTime.min >= 60) {
    if (result.hour === 23) result.hour = 0;
    else result.hour += 1;
    result.min = time.min + calculatedTime.min - 60;
  } else {
    result.min = time.min + calculatedTime.min;
  }
} else {
  result.hour = time.hour + calculatedTime.hour;
  if (time.min + calculatedTime.min >= 60) {
    if (result.hour === 23) result.hour = 0;
    else result.hour += 1;
    result.min = time.min + calculatedTime.min - 60;
  } else {
    result.min = time.min + calculatedTime.min;
  }
}

console.log(`${result.hour} ${result.min}`);

간소화된 풀이

const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");

const [hour, min] = input[0].split(" ").map(Number);
const takeTime = Number(input[1]);

const currentTimeInMinutes = hour * 60 + min;

const finishTimeInMinutes = currentTimeInMinutes + takeTime;

const result = {
  hour: Math.floor(finishTimeInMinutes / 60) % 24,
  min: finishTimeInMinutes % 60,
};

console.log(result.hour, result.min);

시간 관련 문제는 이렇게 푸는게 좋을 것 같다...

추가로
toFixed() 는 반올림
Math.floor() 는 버림

0개의 댓글