TIL. 알고리즘. 항해의 종착일<22.03.17>
항해의 종착일 구하기
function solution(month, day) {
let answer = 0;
let arr = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
for (let i = month-1; i <= arr.length; i++) {
answer += arr[i]; // 98일이 지나는 동안의 달 수를 더해줍니다.
if (answer >= day+98) {
answer -=arr[i] //아래의 계산식을 위해 막 달을 뺐습니다.
month = i+1;
day = answer-day+98 //이해하시는데 어려움이 많은 부분입니다. 주석으로 처리하기 길어서 아래의 글로 적습니다.
return `${month}월 ${day}일`
}
if (i == 11) {
i = -1; // 12월에 시작하면 1월로 돌아가게 했습니다.
}
}
}
console.log(solution(1, 1))
function solution(month, day) {
let answer = 0;
let arr = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
for (let i = month-1; i <= arr.length; i++) {
answer += arr[i]; // 98일이 지나는 동안의 달 수를 더해줍니다.
if (answer >= day+98) {
answer -=arr[i] //아래의 계산식을 위해 막 달을 뺐습니다.
month = i+1;
day = answer-day+98 //이해하시는데 어려움이 많은 부분입니다. 주석으로 처리하기 길어서 아래의 글로 적습니다.
return `${month}월 ${day}일`
}
if (i == 11) {
i = -1; // 12월에 시작하면 1월로 돌아가게 했습니다.
}
}
}
console.log(solution(1, 1))
99일동안의 항해를 몇월 몇일에 시작했으면 언제 끝나는지 알려주는 자바스크립트 코드입니다.
사실 이 코드는 다른분이 쓰신 코드를 가져와 수정한 것입니다. 하지만 달 수를 미리 계산하는 부분이 이해가 안되어 98일이 지나는 일을 세세히 나눠서 이해했고 그에 따라 수정이 불가피 했습니다. 요지는 이렇습니다.
만약 1월 1일에 항해를 시작하였으면 1월 한달동안 남은 날수는 '31일 - 1일 = 30일' 입니다. 그러면 '98일 - 30일 = 68일'이 남게되겠지요. 남은 일은 빠르게 달 수로 지나가게 합니다. 1월의 다음달은 2월이니 '68일 - 28일 = 40일' 그리고 3월이니 '40일 - 31일 = 9일' 입니다.
이 남은 9일은 4월의 9일이 되겠지요? 그러면 계산이 끝났네요? 답은 '4월 9일'이 됩니다. 다시 코드로 돌아가 보면 day를 구하는 식을 왜 저렇게 썼는지, answer -=arr[i]를 굳이 왜 넣었는지 이해가 가실 것 입니다.
주요 메서드
사실 주요 메서드가 없다는게 이 코드의 특징입니다. date 메서드를 안쓰고 코드를 짜는 연습을 해봤습니다.
while을 이용한 다른풀이 방식
function solution(month, day){
let result=""
let days = 0
date = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
month -= 1
while(days + date[month] < 98) {
days += date[month++]
month > 11 ? month = 0 : {}
}
day += 98-days
if(date[month] < day)
day -= date[(month++)]
result = (month+1) + '월 ' + day + '일'
return result;
}
console.log(solution(1,18))
Author And Source
이 문제에 관하여(TIL. 알고리즘. 항해의 종착일<22.03.17>), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@podonamu01/Recalling-of-Today저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)