개발 공부/알고리즘

[항해 99 알고리즘 테스트] "2번. 몇 시간 몇 분 했더라?" JavaScript / Math.floor()

U_D 2022. 3. 17. 21:24

1. 문제 설명

현아는 항해에서 한 주 동안 몇 시간 동안 공부했는 지 기록할 수 있는 알고리즘을 만드는데 성공했다. 공부시간을 꼼꼼하게 관리하는 현아는 이번에 분 단위까지 계산할 수 있는 알고리즘을 만들기로 마음을 먹었다.

 

항해의 체크인 페이지에는 몇가지 조건이 있는데 이를 만족하는 알고리즘을 만들어보자.
 
체크아웃을 할 때 익일 시간은 24+a 로 계산한다. 즉 새벽 2시는 24+2 인 26으로 표기한다.
 
체크인 페이지는 새벽 5시까지 체크아웃이 되어 있지 않으면 체크아웃을 깜빡한 것으로 간주한다.
 
따라서 체크인 시스템은 새벽 5시 정각이나, 새벽 5시를 넘겨서 체크아웃을 하게 되면 자동으로 체크아웃을 오후 9시(21:00)로 한 것으로 처리한다.
 

 

 

2. 제한 조건

체크인(checkin)과 체크아웃(checkout)을 진행한 시간이 담긴 배열 두 개가 주어진다.
각 배열에는 월요일부터 일요일까지 체크인/아웃을 한 시간이 담겨있다.
checkin과 checkout 배열의 길이는 각각 7 이다.

result는 반드시 “00시간 00분” 형식의 문자열로 출력해주셔야 합니다.

 

 

 

3. 예시

입력/출력

 

4. 풀이

[for / Math.floor]

  1. 집념의 for / if / else if 였다.....
  2. 직독 직해 수준으로.. 의식의 흐름에 따라 코드를 짜서 이해가 되리라 본다 ㅠ
function solution(arr1, arr2){
  let totalTime = '';  
	let time = 0;
  let minute = 0;
  let checkIn = [];
  let checkOut = [];
  
  for (let i =0; i < arr1.length; i++) {
    checkIn.push(arr1[i].split(':'))
    checkOut.push(arr2[i].split(':'))
    // console.log(checkIn)
    // console.log(checkOut)
      if (checkOut[i][0] >= 29 && checkOut[i][1] - checkIn[i][1] < 0) {
        time += 21 - checkIn[i][0] - 1
        minute += 0 - checkIn[i][1] + 60
     
      } else if (checkOut[i][0] >= 29 && checkOut[i][1] - checkIn[i][1] >= 0) {
        time += 21 - checkIn[i][0]
        minute += 0 - checkIn[i][1]
      
      } else if (checkOut[i][0] < 29 && checkOut[i][1] - checkIn[i][1] < 0) {
        time += checkOut[i][0] - checkIn[i][0] - 1
        minute += checkOut[i][1] - checkIn[i][1] + 60
        
      } else if (checkOut[i][0] < 29 && checkOut[i][1] - checkIn[i][1] >= 0) {
        time += checkOut[i][0] - checkIn[i][0]
        minute += checkOut[i][1] - checkIn[i][1]
      }
  } if (minute > 60) {
    time = time + (Math.floor(minute / 60))
    minute = minute - (60 * Math.floor(minute / 60))
  }
  return totalTime = `${time}시간 ${minute}분`
}

let arr1=["8:42", "9:00", "8:50", "8:47", "9:01", "8:51", "8:59"];
let arr2=["21:42", "23:10", "25:30", "29:10", "23:11", "26:44", "29:26"];

console.log(solution(arr1, arr2))

 

[팀원 분의 풀이]

확실히 훨씬 깔끔하다.

뭐가 더 좋은 코드인지는 모르겠지만 정돈되 모습이 사람이나 컴퓨터 모두에게 친화적일거 같다.

function solution(arr1, arr2){
	let answer = [0, 0];

  for(let i=0; i<arr1.length; i++) {
    arr1[i] = arr1[i].split(':')
    arr2[i] = arr2[i].split(':')
  }

  for(let i=0; i<arr2.length; i++) {
    if(arr2[i][0] > 28) {
      arr2[i][0] = 21
      arr2[i][1] = 0
    }

    answer[0] += arr2[i][0] - arr1[i][0]
    answer[1] += arr2[i][1] - arr1[i][1]
  }

  while(answer[1] < 0) {
    answer[1] += 60
    answer[0] -= 1
  }

  console.log(arr1,arr2)
  
	return answer;
}


let arr1=["8:42", "9:00", "8:50", "8:47", "9:01", "8:51", "8:59"];
let arr2=["21:42", "23:10", "25:30", "29:10", "23:11", "26:44", "29:26"];

console.log(solution(arr1, arr2))