알고리즘

알고리즘 모의고사

흙으로만든형 2022. 7. 19. 21:00

//  한 주 동안 공부 기록을 남길 알고리즘을 만들어보기
//문제 분리
// 체크인과 체크아웃은 항상 정시에 진행한 것으로 가정한다.
// 체크아웃을 할 때 익일 시간은 24+a 로 계산한다. 즉 새벽 2시는 24+2 인 26으로 표기한다.
// 체크인 페이지는 체크아웃이 새벽 5시 정각이나 새벽 5시를 넘어가면 체크아웃을 깜빡한 것으로 간주한다.

// 따라서 새벽 5시가 넘어가 체크아웃을 하게 되면 자동으로 체크아웃을 오후 9시(21시)로 한 것으로 처리한다.
// 제한 조건
// 체크인(checkin)과 체크아웃(checkout)을 진행한 시간이 담긴 배열 두 개가 주어진다.
// 각 배열에는 월요일부터 일요일까지 체크인/아웃을 한 시간이 담겨있다.
// checkin과 checkout 배열의 길이는 각각 7 이다.
// index 0~6

 

//로직분리
//즉 24+5 인 29시 초과일경우  
//자동으로 21로 체크아웃해야함
//29시가 초과하는 값을 21로 변경해야함 if?
//filter()로 뺀만큼 push()로 밀어서
//누산기?.reduce
//결과값= checkout[i]-checkin[j]

 

1번문제

나의 풀이@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

function solution(arr1, arr2){
let answer=0;
return answer
}
let arr1=[9, 9, 9, 9, 7, 9, 8];//60
let arr2=[23, 23, 30, 28, 30, 23, 23];//180

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

    }
}
    answer1=arr1.reduce((acc, cur, idx)=> {return acc +=cur;},0);
            console.log("체크인합",answer1)
    answer2=arr2.filter(checknum => checknum < 29).reduce((acc, cur, idx)=> {return acc +=cur;},0);
    console.log("체크아웃합",answer2)
    console.log("결과값",answer=answer2-answer1)

 

다른사람풀이

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];

answer=arr1.reduce((acc, curr, idx)=>acc+=( arr2[idx]>=29 ? 21:arr2[idx])-curr,0)

console.log(answer)

 

느낀점 :

나의 로직은 틀리지 않았었다.. 활용방법을 몰랐을뿐... MDN은 아직 무리...

더 쉬운 참고 사이트를 찾아보자!!