항해구구_알고리즘 모의고사

정재연·2022년 1월 20일
0

알고리즘

목록 보기
22/23
post-custom-banner

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

항해의 체크인 페이지에는 몇가지 조건이 있는데 이를 만족하는 알고리즘을 만들어보자.
체크아웃을 할 때 익일 시간은 24+a 로 계산한다. 즉 새벽 2시는 24+2 인 26으로 표기한다.
체크인 페이지는 새벽 5시까지 체크아웃이 되어 있지 않으면 체크아웃을 깜빡한 것으로 간주한다.
따라서 체크인 시스템은 새벽 5시 정각이나, 새벽 5시를 넘겨서 체크아웃을 하게 되면 자동으로 체크아웃을 오후 9시(21:00)로 한 것으로 처리한다.
제한 조건
체크인(checkin)과 체크아웃(checkout)을 진행한 시간이 담긴 배열 두 개가 주어진다.
각 배열에는 월요일부터 일요일까지 체크인/아웃을 한 시간이 담겨있다.
checkin과 checkout 배열의 길이는 각각 7 이다.
result는 반드시 “00시간 00분” 형식의 문자열로 출력해주셔야 합니다.


너무 진이 빠져서... 간략하고 빠르게 정리하려고 한다.

let arr1=["7:51" ,"8:58", "8:56", "8:35", "9:00", "8:46", "8:56"]
let arr2=["22:24" ,"21:51", "25:30", "29:10", "29:12", "22:15", "21:31"]
solution(arr1, arr2)

function solution(arr1,arr2){
  let arr = 0
  let start = []
  let end = []
  let result = 0

  let sh = 0
  let sm = 0

  let eh = 0
  let em = 0
  

  let shc = 0
  let ehc = 0

  let hour = 0
  let min =0
  
  // 2.
  arr = arr2.map((a,i) => a.slice(0,3) > '29' ?a = "21:00":a )

  // 1,3, 준비
  arr1.map((list,i)=>{
    let darr1 = list.split(':')
    let darr2 = arr[i].split(':')

    sh += darr1[0]/1
    sm += darr1[1]/1

    eh += darr2[0]/1
    em += darr2[1]/1
  })

  while( sm > 60){
      shc += 1;
      sm = sm-60;
  }

  while( em > 60){
      ehc += 1;
      em = em-60;
  }

  hour = Math.abs((eh +ehc)  - (sh + shc))
  min = Math.abs(em - sm)

  return`${hour}시간 ${min}`
}

너무 장황하고 길고 보기 좋은 코드 아닌거 알지만 문제를 해결했다는 것에 만족한다~!

너무 오랫동안 여러가지 방법으로 해결하려고 해서 과정은 기억이 잘 안난다.
처음에는 각각 체크인과 체크아웃을 빼주고 난 배열을 다 더해주고 만(왜?)
while문을 이용해 60 이상이 되면 시간을 1더해주었다.
처음부터 분이 60이라는 것을 알았다면 좋았을 텐데 ㅋㅋㅋ
너무 답답해서 Date()를 사용하러고 했으나 값이 안나왔다.

그래서 다시 천천히 생각을 했다.
아래 대로 문제를 해결해 나갔다.

  1. arr에 모든 arr2 29시 이상인 것들은 21:00로 변경

  2. arr1 모든 요소들의 시간, 분을 각각 더함

  3. arr 모든 요소들의 시간, 분을 각각 더함

  4. 각 분은 while로 60이 넘어가면 시간이 1올라가도록 변경

  5. 체크아웃 - 체크인!!!!

    고생했다.

    코드 정리는 나중에!

profile
코린이 개발자 :)
post-custom-banner

0개의 댓글