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]
- 집념의 for / if / else if 였다.....
- 직독 직해 수준으로.. 의식의 흐름에 따라 코드를 짜서 이해가 되리라 본다 ㅠ
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))
'개발 공부 > 알고리즘' 카테고리의 다른 글
220621 [알고리즘] codility _ CyclicRotation(배열 돌리기) / JavaScript / unshift, pop 활용 (0) | 2022.06.21 |
---|---|
220620 [알고리즘] 백준, 프로그래머스 깃허브 연동 / 백준허브 사용 (0) | 2022.06.20 |
[항해 99 알고리즘 테스트] "1번. 전화번호 양식" JavaScript / .slice() (0) | 2022.03.17 |
[프로그래머스 알고리즘] "콜라츠 추측" JavaScript / while, for (0) | 2022.03.16 |
[프로그래머스 알고리즘] "정수 제곱근 판별" JavaScript / Math.sqrt (), Math.pow() (0) | 2022.03.16 |