1. 문제 설명
(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) 입출력 예
a | b | result |
5 | 24 | "TUE" |
2. 문제 해결
(1) 문제 해결 접근
문제는 날짜의 요일을 계산하는 것입니다.
Java의 내장 라이브러리를 사용하여 문제를 해결할 수 있습니다.
`java.time`패키지의 LocalDate클래스를 사용하면,
간단하게 날짜 객채를 생성하고 요일을 구할 수 있습니다.
(2) 전체 코드
import java.time.DayOfWeek;
import java.time.LocalDate;
class Solution {
public String solution(int a, int b) {
// 2016년 a월 b일의 날짜 객체 생성
LocalDate date = LocalDate.of(2016, a, b);
// 해당 날짜의 요일 가져오기
DayOfWeek dayOfWeek = date.getDayOfWeek();
// 요일을 배열로 매핑
String[] days = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
// DayOfWeek의 값은 1(MONDAY)~7(SUNDAY)이므로, 배열에 맞게 인덱스 조정
return days[dayOfWeek.getValue() % 7];
}
}
(3) 코드 설명
1️⃣ 날짜 객체 생성
LocalDate date = LocalDate.of(2016, a, b);
2016년의 특정 월 (a)과 일(b)에 해당하는 날짜 객체를 생성합니다.
2️⃣ 요일 정보 추출
DayOfWeek dayOfWeek = date.getDayOfWeek();
생성된 LocalDate 객체 date로부터 요일 정보를 DayOfWeek열거형으로 가져옵니다.
DatyOfWeek는 요일을 월요일(1)부터 일요일(7)까지 정수 값으로 표현합니다.
3️⃣ 요일 매핑 및 인덱스 조정
String[] days = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
return days[dayOfWeek.getValue() % 7];
`dayOfWeek.getValue()`는 월요일부터 일요일까지 1~7을 반환합니다.
연산(%7)을 사용하여 DayOfWeek의 숫자를 문제에서 요구하는 요일 배열의 인덱스로 매핑합니다.
728x90