본문으로 바로가기

🏟️ 2016년

📘 문제 설명

2016년 1월 1일이 금요일(FRI)일 때, 두 수 $a$(월)와 $b$(일)를 입력받아 해당 날짜가 무슨 요일인지 구하는 문제입니다. 요일은 영문 대문자 세 글자로 반환해야 합니다.

📌 제한조건

  • 2016년은 윤년입니다. (2월이 29일까지 있습니다.)
  • 입력으로 주어지는 날짜는 실제로 존재하는 날짜입니다.
  • 요일 이름은 SUN, MON, TUE, WED, THU, FRI, SAT 중 하나로 리턴해야 합니다.

💡 개념 설명

  • 알고리즘 핵심: 1월 1일부터 입력받은 $a$월 $b$일까지의 누적 일수(Total Days)를 계산한 뒤, 일주일 단위인 7로 나눈 나머지 연산을 통해 요일을 결정합니다.
  • 로직 단계:
    1. 월별 일수 설정: 각 달의 총 일수를 배열에 저장합니다. (윤년이므로 2월은 29일) int[] monthDays = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    2. 총 일수 계산: for 루프를 사용해 a-1월까지의 일수를 합산하고 마지막에 b일을 더해 전체 일수를 구합니다.
    3. 요일 인덱스 매핑: 1월 1일(1일째)이 금요일이므로, 나머지에 보정값 4를 더해 인덱스를 맞춥니다. (totalDays + 4) % 7
    4. 결과 반환: 요일 배열에서 해당 인덱스에 매칭되는 문자열을 반환합니다.

📎 입출력 예시

💻 프로그래머스 제출용 코드

class Solution {
    public String solution(int a, int b) {
        String[] day = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
        int[] monthDays = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

        int totalDays = 0;
        for (int i = 0; i < a - 1; i++) {
            totalDays += monthDays[i];
        }
        totalDays += b;

        return day[(totalDays + 4) % 7];
    }
}

🖥️ IntelliJ 실행용 코드

import java.util.Arrays;

public class Solution {
    public String solution(int a, int b) {
        String[] day = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
        int[] monthDays = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

        int totalDays = 0;
        for (int i = 0; i < a - 1; i++) {
            totalDays += monthDays[i];
        }
        totalDays += b;

        return day[(totalDays + 4) % 7];
    }

    public static void main(String[] args) {
        Solution sol = new Solution();

        // 테스트 케이스 1: 5월 24일
        int a1 = 5, b1 = 24;
        System.out.println("결과 1: " + sol.solution(a1, b1)); // "TUE"

        // 테스트 케이스 2: 1월 1일
        int a2 = 1, b2 = 1;
        System.out.println("결과 2: " + sol.solution(a2, b2)); // "FRI"
    }
}

📎 결과