2016년

SaGo_MunGcci·2022년 7월 19일
0

  • 날짜와 요일이 나와서 지레 겁먹었던 것이 알고리즘을 못 푼 가장 큰 원인이었다.

  • 그래서 예제를 참고해서 이문제의 원리를 접근 및 분석 해보았다.

    1. 2016(해당년도)의 1월1일이 무슨 요일인지 확인하기.
      --> 해당년도의 해당월 해당일의 요일이 1월 1일에 해당하는 요일부터 시작하기 때문이다.
    1. 입력 월,일까지의 일수를 구해야한다.
  • 1) 12달 중 2월은 윤달이라고 해서 일수가 변한다. 그러면 내가 입력한 월과 일의 총 일수가 바뀔 수있다. 제한 조건에 2016년은 윤년(29일)이라고 제시함.

  • 2) 내가 입력한 달의 전달까지 일수를 먼저 계산후 내가 선택한 달에서 입력한 일을 더한다.

- 2. 이렇게 도출한 총 일수에 7을 나눈 나머지를 구한다. 월~일까지 7일이 있으니까 요일을 구하려면 7을 나누어야 한다. 그리고 나눈 나머지가 바로 인덱스 번호가 되는 것이다!

- 3. 즉 내가 선택한 해당년도 월 일의 총수만큼 요일을 반복하는 것이다!

2016년이 금요일 부터 시작하니까 [금,토,일,월,화,수,목]의 순으로 해당일수를 반복하여 맨 마지막 순서의 요일이 해당년도의 월 일의 요일이 되는 것이다!!!

public class Q13 {

    public String solutionQ13(int a, int b) {

        String answer = "";

        //1월1일이 금요일이니까 계산하기 편하도록 일주일 중 금요일이 시작처럼 배열
        String[] day={"FRI","SAT","SUN","MON","TUE","WED","THU"};
        int[] last={31,29,31,30,31,30,31,31,30,31,30,31};
        //2016년의 몇번째 날인지 저장할 변수
        int date=0;

        //1.월별 마지막 날 수의 합
        for(int i=0; i<a-1; i++){
            date += last[i];
        }
        //2.a-1달까지의 일수 + 내가 선택한 a달의 일까지 일수(해당날은 포함 안되니까 -1)
        date += b-1;

        //3.일수%7로 요일 구해서 리턴
        return day[date%7];


    }

}

참고 : https://myrinstory.tistory.com/m/83

profile
이리저리 생각만 많은 사고뭉치입니다.

0개의 댓글