a | b | result |
5 | 24 | "TUE" |
function solution(a, b) {
let answer = '';
const days = ["THU", "FRI", "SAT", "SUN", "MON", "TUE", "WED"];
const months = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
let totalDay = 0;
for (let i = 0; i < a - 1; i++) {
totalDay += months[i];
}
totalDay += b;
answer = days[totalDay % 7];
return answer;
}
날짜의 계산 방식을 알고 있다면 비교적 간단한 문제다.
모든 날짜는 7일을 기준으로 순환 반복하며, 매 달마다 정해진 일 수가 있다. 예를 들어 1일이 금요일이면 7일을 더한 8일이 금요일, 다시 7일을 더한 15일이 금요일이 반복되는 식이다.
해서 코드를 다음과 같이 구성하였다.
먼저 정답을 기입할 answer, 날짜 문자열들을 입력해둔 days, 한 달마다 총 날짜수가 어떻게 되는지 입력해둔 months 이다.
여기서 잘 살펴봐야 하는 것은 days 의 순서가 "THU" 부터 시작이다. 주어진 문제에서 1월 1일이 금요일 FRI 이기 떄문에 이를 인덱스값 1이라고 기준을 잡고 해당 위치에 올 수 있도록 순서를 구성했다.
다음은 months 의 두번째 인덱스, 29라는 숫자인데 문제의 제한조건에서 이 2016년은 '윤년' 이라고 설명하였다.
즉 2월이 29일이라는 말이다.
그 다음 코드로 내려가면 totalDay 를 선언 및 반복문이 활용되고 있다.
반복 시행은 i 가 0부터 a - 1까지, 즉 a가 3월 이라고 입력을 받았다면 0, 1 만 반복한다는 것이다.
이렇게 작성한 이유로는 예를 들어 3월 22일 을 생각했을 때, 이번년도가 시작된 이후 3월 22일까지의 총 날짜수는? 이라고 물어본다면 [1월의 총 날짜 + 2월의 총 날짜 + 22일] 이라고 답할 수 있다.
해서 주어진 a의 지난 달까지의 총 날짜수를 더하기 위해 반복 조건을 구성하였고 반복문이 끝나고 난 후 b 값을, 예시의 22일을 더해주었다.
그 이후에 이 총 날짜수를 7로 나눈 나머지값을 인덱스로 하여 days 배열에서 결과를 도출한다.
처음 days 선언 시 "FRI" 의 인덱스가 1이 되도록 선언을 해주었기에 그보다 초과된 값, 즉 나머지값만 구하면 되는 문제였다.
[JS] 덧칠하기 - 프로그래머스 (0) | 2024.11.27 |
---|---|
[JS] 모의고사 - 프로그래머스 (0) | 2024.11.25 |
[JS] 명예의 전당(1) - 프로그래머스 (0) | 2024.11.21 |
[JS] 콜라 문제 - 프로그래머스 (0) | 2024.11.20 |
[JS] 가장 가까운 같은 글자 - 프로그래머스 (0) | 2024.11.18 |