728x90
[문제]
[코드]
function solution(a, b) {
var answer = '';
const day = ["FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"];
const dayofMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
let days = 0;
for(let i =0 ; i < a - 1; i++)
{
days += dayofMonth[i];
}
days += b - 1;
answer = day[days % 7];
return answer;
}
[풀이]
기본적으로 2016년의 각 달을 알고 있어야 하는 문제이다.
2016년의 각 달의 총 수를 dayofMonth에 배열로 저장해둔다. 1월 1일이 금요일이라면, 기본적으로 첫번째 금요일은 0, 토요일 1, ~~~ 목요일 6과 같이 할 수 있다. 우리는 이것을 보고 7로 나눴을 때 나머지 값이 0~ 6까지 존재한다는 사실을 기억해낸다면 해당문제를 해결 하기가 쉬워진다. 정답을 넣어줄 day 배열을 "FRI" 부터 0번째로 두고 계산을 시작한다. 각 달의 날을 구해야하는데 a의 값까지 배열을 그대로 돌린다면 안된다. 예시와 같이 5월까지 배열을 진행한다면,
그냥 for문에서는 dayofMonth[4] 까지 진행하게 되는데 dayofMonth[4]의 값은 5월의 값이므로 이 값을 더해진다면 6월달의 값이 적용된다. 해당 문제를 해결하기 위해서 a -1 까지 days의 달수를 더해준다.
그리고 일 수를 적용해주면 되는데, days의 그냥 b를 합치면 안된다. 1월1일 같은 경우 1의 값이 들어갈때 b의 값이 1이 아니라 0이여야 day[0] 즉 금요일이 나오기 때문에, days의 값을 b - 1 한 값에 더해주고 해당 값에 7을 나눠 나머지를 구해서 해당하는 day배열 값을 구해주면 문제를 해결할 수 있다!
[다른사람의 풀이]
function getDayName(a,b){
var tempDate = new Date(2016, a-1, b);
return tempDate.toString().slice(0,3).toUpperCase();
}
js에서 Date함수를 통해 해당하는 달과 일의 날짜를 구할 수 있다.
하지만 다른 함수에서도 똑같은 작용을 알 수 없기 때문에, 원래 쓰던 풀이를 작성해도 괜찮을 것 같다!
'코딩 > 코딩테스트' 카테고리의 다른 글
[프로그래머스/JS] 과일장수 (0) | 2024.06.18 |
---|---|
[프로그래머스/JS] 카드뭉치 (0) | 2024.06.17 |
[프로그래머스/JS] 명예의 전당(1) (0) | 2024.06.13 |
[프로그래머스/JS] 콜라 문제 (0) | 2024.06.11 |
[프로그래머스/JS] 두 개 뽑아서 더하기 (0) | 2024.06.05 |