[TIL] 카테고리/알고리즘 문제풀기

[자바스크립트] 프로그래머스 Lv.1 2016년

티레이니 2022. 5. 14. 09:38

 

코드 자체는 금방 짰는데 맘에 안들어서 한참을 갸우뚱 거렸던 코드.

다른 사람 답변을 보니 date함수로 해결해버리던데, 그게 맞는거 같으면서도

그럴거면 문제를 내는 의미가 있나 싶으면서도.. 

레벨 1 문제니까 맞을것도 같으면서도... 아무튼 그렇다

 

let firstDay = [1, 32, 61, 92, 122, 153, 183, 214, 245, 275, 306, 336] 
// 각 월의 시작날짜가 16'년의 몇번째 날인지 체크

let dayIs = ['THU', 'FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED']  
// 요일 체크~ 순서는 1월 1일인 '금'이 인덱스 1번이게 했어요. 

answer = dayIs[(firstDay[a-1]+(b-1))%7]

console.log(answer)

 

일단 논리는 입력된 날짜가 1월 1일로부터 몇번째 날짜인지 세서 7로 나누고 나머지로 요일을 뽑는거다.

각 월의 시작날짜가 며칠쨰인지를 배열로 넣어주었고....

 

...? 근데 이걸 내가 계산해서 넣어줄거면 프로그램 의미가 없지 않은가 싶은거다.

엑셀로 끍어다가 만든 배열이지만 암튼 맘에 안들어서 

 

let monthDays = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30]
let dayIs2 = ['THU', 'FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED'] 
let thisMonth = monthDays.slice(0,a).reduce(function(sum,days){return sum+days})

let answer2 = dayIs2[(thisMonth+b)%7]

 

날짜를 셀수 있게 다시 만들었다. 마음이 아주조금 편해졌지만 여즉 맘에 안든다...

불 - 편....

 

뭐 그래도 2월 값만 바꾸면 다른 년도에도 쓸 수 있는 코드가 되었으니까... 싶으면서도 여전히 맘에 안들어,,

 

function getDayName(a,b){
  var date = new Date(2016, (a - 1), b);
    return date.toString().slice(0, 3).toUpperCase();
}

 

date를 사용한다면 저렇게 된단다. 추천을 가장 많이 받은 다른 분 코드이다.