본문 바로가기

알고리즘

3월 15일 알고리즘 모의고사 2번 풀이

728x90

나의코드)

// function solution(month,day){
//   let answer=[];//빈 배열 설정
//   let daysOfMonth=[0,31,28,31,30,31,30,31,31,30,31,30,31]//각 달마다 날의 개수
//   let upTodays=0;//이번달 전까지의 달의 날짜 모두 더해주는 변수
//   let sumToday=0//이번 달까지의 날을 모두 더해주는 변수
//   let totalDays=0;//98일을 더한 총 일수
//   let count=0//달이 들어갈 부분
//   for(i=0;i<month;i++){
//     upTodays=daysOfMonth[i]+upTodays
//   } //이번달 전까지의 일수를 모두 더함
//   sumToday=upTodays+day//거기에 이번달의 day를 더함
//   totalDays=sumToday+98//거기에 앞으로의 98일을 더함
//   if(totalDays>365)//365보다 더 큰 경우에는
//     totalDays=totalDays-365//365를 빼줌(순환됨)
//   else{
//     totalDays=totalDays//아니면 그대로임
//   }
//   for(i=0;i<daysOfMonth.length;i++){
//     if(totalDays>daysOfMonth[i]){//만약 전체날짜가 > daysOfMonth[i]이면
//         totalDays=totalDays-daysOfMonth[i]//전체 날짜에서 달 수를 순차적으로 빼줌
//         count=count+1} //해주는만큼 count를 올림 
//   }answer.push(count)//최종 카운트 = 달을 의미
//    answer.push(totalDays)//남은 totaldays는 날을 의미
//    return answer//answer에 넣어서 반환
// }console.log(solution(6,22))//최종 출력[9,28]

나의풀이)

1월 1일부터 항해를 시작하는 현재날짜까지를 sumToday라는 변수에 담아 저장한 뒤 거기에 98일을 더한 값을 totalDays에 최종적으로 저장한다. 이 때 98일이라는 숫자로 인해 항해를 시작하는 달이 10월 ~ 12월인경우에는 내년으로 넘어갈 수 있기 때문에 totalDays가 365일 이상인 경우에는 365를 빼주어야 한다. (문제에서 윤년에 대한 계산없이 2월은 모두 28일로 고정되어있다) 이 단계를 거친 후의 totalDays가 > daysOfMonth[i]라면 totalDays<daysOfMonth[i]가 될 때까지 for문을 이용해서 계속해서 빼준다. 최종적으로 남은 totalDays는 날짜의 값이 된다. i가 돌아갈 때마다 위에서 설정해둔 count라는 값을 하나씩 더해가는데,  for문이 종료 될 때의 count의 값은 달의 값이 된다. 빈 배열인 answer에 count와 totalDays의 값을 각각 달과 날짜의 값으로 받아 넣어주면 완료

728x90