코딩기록

항해 8일)JS - 13프로그래머스 2016년 본문

항해99/챕터2 알고리즘

항해 8일)JS - 13프로그래머스 2016년

뽀짝코딩 2022. 1. 17. 12:23
728x90

 


문제 해석

2016년 한 해만 커버하면 문제를 통과할 수 있다. 따라서 day라는 배열을 만들어서 1월부터 12월까지의 총 일자를 담아놓으면 쉽게 문제를 해결할 수 있다.

var sumDay = [31,29,31,30,31,30,31,31,30,31,30,31];

이렇 각 월의 일자를 담아둔 다음 for문을 이용해서 그 전달까지의 일자를 더한 다음 b에 주어진 일자를 더하면 1월 1일부터 현재 날짜까지의 총 일 수를 구할 수 있다. 총 일자가 구해지면 나머지 연산(X % 7)를 이용해 요일을 구하면 된다. 1월 1일이 금요일임으로 요일의 배열은

var dayOfWeek = ["THU","FRI","SAT","SUN","MON","TUE","WED"];

이러한 방식으로 목요일부터 담았다. 나머지 연산이 1이 나올 경우 ‘금요일’이 나와야 함으로 인덱스 1에 “FRI”를 담았다.

개인 블로거의 풀이를 가져옴. 아래 참고

 

 

 

 

답안

 

 

 

 

풀이

입출력 예 를 보면 a는 5 b는 24 result는 "TUE" 이다. 

solution 함수에서 인자로 받는 a와 b가 5와 24일때 "TUE"라는 기댓값이 나오게하라는 뜻이다.

처음엔 함수와 인자의 의미를 몰라 입출력 예가 무슨말인지 조차 이해가 되지 않았었다.

 

//인덱스번호  0,    1,       2,        3,       4,       5,      6,      7,      8,       9,       10,       11  
    var day = [31,   29,   31,     30,    31,    30,    31,    31,    30,     31,     30,      31];  //각 달의 마지막 날
// 길이         1,       2,       3,        4,       5,       6,      7,      8,       9,      10,      11,       12     

//              1월,   2월,   3월,   4월,  5월,  6월,    7월,   8월,   9월,   10월,   11월,   12월

day의 길이는 12이이고 인덱스 번호는 0~11

길이와 인덱스 번호의 개념을 확실히 하면 헷갈리지 않는다.

 

function solution(a, b) {
    var answer = '';    //answer 선언,초기화
    var week = ["THU","FRI","SAT","SUN","MON","TUE","WED"];   
    var day =[31,29,31,30,31,30,31,31,30,31,30,31];     //각 달의 마지막 일수
    
    var sum = 0;                     //먼저 sum을 선언,초기화 한다

			                 //for문의 조건을 보면 i < a-1; 까지 라고 되어있다.
   for(var i = 0; i < a-1; i++){   // a는 5인데  5-1= 4 즉, 4전인 3까지 (인덱스 3) 반복해 하나씩 더해서
			                // sum에 넣으면
        sum += day[i];               //5월 전달(4월) 까지 일수의 합이 sum에 들어간다.
    }
    sum += b;	       //sum에 b(24)를 더하면 1월 1일부터 현재 날짜까지(5월24일)의 
                                //총 일 수를 구할 수 있다.
    
    var ans = (sum % 7);       //구한 총 일수에서 나머지 연산자를 요일을 구한다.
   		               //  2016년 1월1일은 금요일이므로 나머지 연산이 1일때 "FRI"가
                              // 될수있게 week배열을 만들고 answer에 넣는다.
    answer = week[ans];
    return answer;
}

 

일자가 구해지면 나머지 연산(X % 7)를 이용해 요일을 구하면 된다. 1월 1일이 금요일임으로 요일의 배열은

인덱스 1이 "FRI"가 되도록 만든다.

 

 

 

 

 

※ 알아야할것 ※

for문 

let num = '';             //num을 빈문자열로 선언,초기화하고
for(let i = 0; i < 5; i++) {  // i는 0부터 / 4까지 / 1씩 추가 되고 (i는 아직 0이다.)
	num++;                // 그 값에 0+1을 해서   i=0 일때 1
                                                    i=1 일때 2
                                                    i=2 일때 3
                                                    i=3 일때 4
                                                    i=4 일때 5

    console.log(num);         //num값을 출력한다.  
------------------------
결과
1
2
3
4
5


 //주의!! i++ 와 ++i 는  큰 차이가 있다.
 둘다 1씩 i값을 증가 시키는 것은 같지만 타이밍이 다르다
 i++는 
 기존의 값을 사용하고 i를 1증가시킨다.
 기존 값(0)을 들고 가서 사용하는 순간에는 기존값으로 계산되고 나중에 1이 더해진다.
 
 ++i는 
 사용할떄 i값을 1증가시키고 사용한다. 
 기존값(0)에서 1이 더해진 다음. 값(1)을 들고가 계산된다.

 

 

 

 

 

 

 

 

 

 

 

 

 

참고

* 개인 블로그 (for문)

https://wooder2050.medium.com/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-2016%EB%85%84-javascript-cfd2268af43a

*개인 블로그 (년도, 월, 일에 상관없이 날짜 구하는 공식)

https://ghost4551.tistory.com/66

*개인블로그 ( Date(), getDay() )

https://sururu.tistory.com/138

 

반응형
Comments