꾸준하게
[JS코테] 2016년 본문
728x90
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/12901
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[나의 풀이]
function solution(a, b) {
let dayArr = ['THU','FRI','SAT','SUN','MON','TUE','WED'];
let num;
switch (a) {
case 1 :
num = b;
break;
case 2 :
num = 31 + b;
break;
case 3 :
num = 31 + 29 + b;
break;
case 4 :
num = 31 * 2 + 29 + b;
break;
case 5 :
num = 31 * 2 + 29 + 30 + b;
break;
case 6 :
num = 31 * 3 + 29 + 30 + b;
break;
case 7 :
num = 31 * 3 + 29 + 30 * 2 + b;
break;
case 8 :
num = 31 * 4 + 29 + 30 * 2 + b;
break;
case 9 :
num = 31 * 5 + 29 + 30 * 2 + b;
break;
case 10 :
num = 31 * 5 + 29 + 30 * 3 + b;
break;
case 11 :
num = 31 * 6 + 29 + 30 * 3 + b;
break;
case 12 :
num = 31 * 6 + 29 + 30 * 4 + b;
break;
}
return dayArr[num % 7];
}
console.log(solution(11, 1))
코드가 좀 길어지긴 했지만 switch를 사용하여 각각의 월마다 1월 1일부터 며칠이 지났는지를 계산하여 7로 나누어 요일을 구하였다.
[다른 풀이]
function solution(a, b) {
const monthDay = [31,29,31,30,31,30,31,31,30,31,30,31]
const weekDay = ["THU", "FRI", "SAT", "SUN", "MON", "TUE", "WED"]
let days = b
for(let i=0 ; i<a-1 ; i++)
days += monthDay[i];
return weekDay[days%7];
}
각 달마다의 날짜 수를 배열로 표현하는 방법은 생각지 못했다.
나도 month배열을 추가하여 다시 풀어보았다.
[나의 두 번째 풀이]
function solution(a, b) {
const monthArr = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
const dayArr = ['THU','FRI','SAT','SUN','MON','TUE','WED'];
let num = b;
for(let i = 0; i < a; i++) {
num += monthArr[i];
}
return dayArr[num % 7];
}
나는 a=1일 경우 어떻게 할지 고민하다가 monthArr에 0을 추가했는데,
위의 [다른 풀이]에서는 for 조건에 i < a-1로 제한을 두어 a=1일 경우 조건이 안되므로 그냥 b가 출력되게 코딩하였다.
그리고 변수 이름 자체도 num은 너무 포괄적이므로 [다른 풀이]처럼 days로 표현하는 게 더 적합해 보인다.
그리고, 또 다른 풀이에서는 Date 객체를 사용했다.
function solution(a, b){
const tempDate = new Date(2016, a-1, b);
return tempDate.toString().slice(0,3).toUpperCase();
}
new Date(2016, a-1, b)를 하면
Mon May 23 2016 00:00:00 GMT+0900 (한국 표준시)
이렇게 리턴이 되고 맨 앞 세 단어를 잘라서 대문자로 변환하여 리턴한 것이다.
이 new Date()는 알아두면 좋을 것 같다.
오늘의 코테일기 끝!
728x90
반응형
'JS코딩테스트' 카테고리의 다른 글
[JS코테] 소수 만들기 - 리팩토링해보기❗ (0) | 2024.01.13 |
---|---|
[JS코테] 모의고사 - 다시 확인❗ (0) | 2024.01.03 |
[JS코테] 과일 장수 (0) | 2023.12.26 |
[JS코테] 카드 뭉치 (0) | 2023.08.29 |
[JS코테] 명예의 전당 (1) (0) | 2023.08.01 |