[Js] Algorithm Prac Test

이성규·2022년 11월 22일
0

✅ 신대륙 발견

  • 기원이는 오늘 항해99를 시작했다. 성격이 급한 기원이는 항해 1일 차부터 언제 수료를 하게될 지 궁금하다. 항해 1일 차 날짜를 입력하면 98일 이후 항해를 수료하게 되는 날짜를 계산해주는 알고리즘을 만들어보자.

  • 제한 조건
    1 ≤ month ≤ 12
    1 ≤ day ≤ 31 (2월은 28일로 고정합니다, 즉 윤일은 고려하지 않습니다.)

  • 입출력 예

month     day    result
11        27    "3월 5일"
6         22    "9월 28일"
  • 지정 입력값
month     day    result
  1       18   "4월 26일"
  • 답안 포맷
function solution(month, day){
	let result=""
	return result;
}
console.log(solution(1,18))

🔷 풀이

// 98일 이후 항해를 수료하게 되는 날짜를 계산해주는 알고리즘

function solution(month, day){ 
	let result=""
    // 어제 공부했던 newDate 방법으로 작성
    // newDate()에 2022(올해), month, day
    // month는 순서가 0부터 11(1월부터 12월)로 인식되므로 -1을 해준다.
    // day는 98일 이후 항해 수료이므로 +98
    let date = new Date(2022, month-1, day+98)
    
    // getMonth는 date값의 month 값에서 받아오기 (위에서 -1을 해주었기 때문에 다시 +1)
    // 위에서 month-1을 하기전 month로 입력했을때 결과값이 3월 26일로 나와서 수정
    
    let getDay = date.getDate()
    // getDay는 date값의 day값을 받아오기 (다른 과정 필요없음)	
        
    return getMonth+"월"+getDay+"일"
        //getMonth값 + 문자열 + getDay + 문자열
}
console.log(solution(1,18))

✅ 몇시간 했더라?

지용이는 항해에서 한 주 동안 공부 기록을 남길 알고리즘을 만들어보기로 결심했다.
항해의 체크인 페이지에는 몇가지 조건이 있는데 이를 만족하는 알고리즘을 만들어보자.

  • 체크인과 체크아웃은 항상 정시에 진행한 것으로 가정한다.

  • 체크아웃을 할 때 익일 시간은 24+a 로 계산한다. 즉 새벽 2시는 24+2 인 26으로 표기한다.

  • 체크인 페이지는 체크아웃이 새벽 5시 정각이나 새벽 5시를 넘어가면 체크아웃을 깜빡한 것으로 간주한다.
    따라서 새벽 5시가 넘어가 체크아웃을 하게 되면 자동으로 체크아웃을 오후 9시(21시)로 한 것으로 처리한다.

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

  • 입출력 예

        chkin                     chkout                     result
[9, 9, 8, 8, 7, 8, 9]   [21, 25, 30, 29, 22, 23, 30]           96
[9, 7, 8, 9, 7, 9, 8]   [23, 22, 26, 26, 29, 27, 22]           110
  • 지정 입력값
        chkin                     chkout                     result
[9, 9, 9, 9, 7, 9, 8]   [23, 23, 30, 28, 30, 23, 23]           102
  • 답안 포맷
function solution(arr1, arr2){
	let answer=0;
	return answer;
}
let arr1=[9, 9, 9, 9, 7, 9, 8];
let arr2=[23, 23, 30, 28, 30, 23, 23];
console.log(solution(arr1, arr2))

🔷 풀이

// 한 주동안 공부한 시간 구하기
//arr1 = chkin time, arr2 = chkout time (time = chkout - chkin)

function solution(arr1, arr2){
	let answer = 0; // 초기값 설정

    // arr1과 arr2의 배열의 길이는 7로 같으므로 아무거나 사용하여 반복문 작성
    for(let i = 0; i < arr1.length; i++){
                
        // 체크아웃을 할 때 익일 시간은 24+a 로 계산한다. 즉 새벽 2시는 24+2 인 26으로 표기한다                  
        if(arr2[i] >= 29){     // 체크인 페이지는 체크아웃이 새벽 5시 정각이나 새벽 5시를 넘어가면 체크아웃을 깜빡한 것으로 간주
            arr2[i] = 21      // 새벽 5시가 넘어가 체크아웃을 하게 되면 자동으로 체크아웃을 오후 9시(21시)로 한 것으로 처리
        }
        let time = arr2[i] - arr1[i]   // 공부한시간 (time = chkout - chkin)
        answer += time  // 한 주동안이므로 배열의 길이(7) 전체 더해주기 반복
    }
	return answer;
}
let arr1=[9, 9, 9, 9, 7, 9, 8];
let arr2=[23, 23, 30, 28, 30, 23, 23]   ;
console.log(solution(arr1, arr2))
profile
개발자를 위한 발걸음

0개의 댓글