코딩 테스트(Coding Test)/프로그래머스

[프로그래머스] 2016년 - 자바(Java)

잇트루 2023. 7. 13. 00:45
반응형

문제링크

https://school.programmers.co.kr/learn/courses/30/lessons/12901

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

문제 설명

2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a, b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각

SUN, MON, TUE, WED, THU, FRI, SAT

 

입니다. 예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 "TUE"를 반환하세요.

 

 

제한조건

  • 2016년은 윤년입니다.
  • 2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다)

 

 

입출력 예

a b result
5 24 "TUE"

 

 

코드

class Solution {
    public String solution(int a, int b) {
    	// 날짜의 요일을 담은 배열 (2016년 1월 1일은 금요일부터 시작)
        String[] day = {"FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"};
        // 각 월의 일수를 담은 배열
        int[] month = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 30};
        // 총 일 수를 담을 변수 선언
        int answer = 0;
        
        // a 이전의 총 일 수 더하기
        for (int i = 0; i < a - 1; i++) {
            answer += month[i];
        }
        
        // 남은 일수 더하기
        answer += b - 1;
        
        // 7로 나눈 나머지의 인덱스를 가진 요일 반환
        return day[answer % 7];
    }
}

코드 설명

주석 참고

  • 2016년의 입력받은 날짜의 이전 날짜를 구하여 7로 나눈 인덱스를 통해 해당 날짜의 요일 구할 수 있다..
  • 2016년은 금요일부터 시작하여 FRI부터 시작하는 요일 배열 선언한다.
  • 2016년이 윤년임을 고려하여 각 월의 일 수를 담은 배열을 선언한다.
  • a월 b일 이전의 날짜를 모두 구한다. a의 이전 달까지의 모든 일수를 더하기 위해 a - 1, 자바 인덱스는 0부터 시작함을 고려하여 b - 1만큼 더한다.
  • 직전 날짜까지의 총 일수를 7로 나누어 day의 인덱스로 해당 요일을 구할 수 있다.
반응형