13. 2016년

김영민·2022년 1월 28일
0

문제📃

1. 문제 설명

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"를 반환하세요.

2. 제한 조건

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

3.입출력 예

abresult
524"TUE"

풀이

나의 정답👨‍💻

public class YearOf2016 {
    // 두 정수를 매개변수로 하며, 문자열을 리턴값으로 하는 메소드 생성
    public String solution(int a, int b) {
    
    	// 각 월의 총 일수를 객체로 하는 배열을 선언(2월은 윤년이므로 29일로 입력)
    	// 12월은 나중에 월의 총 일수를 합할 때 더해질 일이 없기 때문에 생략 가능
        int[] month = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30};
        
        // 요일을 객체로 하는 배열을 선언
        String[] day = { "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT" }; 
        
        // 1월 1일이 금요일([5]번째 객체)이었기 때문에 5를 더한 값으로 초기화 
        int totalDays = 5; 
        
        // 월마다 총 일수를 더해줌
        // 'month'는 [0]번째 부터 시작하기 때문에 1을 빼줘야 함
        // 왜냐하면 1월의 총 일수(31일)는 1월 날짜를 계산 할 때는 더해지면 안되기 때문에
        // 'int i = 1'로 선언하고 'month[i - 1]'로 입력
        // 만약 'int i = 0'으로 선언하고 'month[i]'라고 입력하면
        // 1월 날짜를 구할 때 31이 더해져서 원하는 값이 나오지 않음
        for (int i = 1; i < a; i++) {
            totalDays += month[i - 1];
        }
        
        // 1월 1일부터 시작했기 때문에 1을 차감
        totalDays += b - 1;
        
        // 'day'배열에서 총 일 수를 7로 나눈 값의 나머지 번째의 객체를 돌려줌
        return day[(totalDays) % 7];
    }

테스트용 코드🎯

    public static void main(String[] args) {
        YearOf2016 yearof2016 = new YearOf2016();
		
        int a1 = 1; int b1 = 1;
        int a2 = 5; int b2 = 24;
        
        System.out.println(yearof2016.solution(a1,b1)); // FRI 출력
        System.out.println(yearof2016.solution(a2,b2)); // TUE 출력
    }
}
profile
Macro Developer

0개의 댓글