문제: https://school.programmers.co.kr/learn/courses/30/lessons/12901
class Solution {
public String solution(int a, int b) {
String dayWeek[] = {"THU","FRI","SAT","SUN","MON","TUE","WED"}; //요일판별
int monthDay[] ={31,29,31,30,31,30,31,31,30,31,30,31}; //한달일수
int day = 0;
String answer = "";
for(int i=0; i<a-1; i++) { // 1월부터 입력한 전달까지만
day += monthDay[i];
}
day = day + b;
answer = dayWeek[(day % 7)];
return answer;
}
}
이 풀이는 2016년의 특정 날짜에 해당하는 요일을 찾기 위해 배열을 사용했다.
- 날짜 계산:
for문을 사용하여 주어진 월(a)의 전 월까지의 총 일수를 day 변수에 누적함.
예를 들어, a가 3월이면 1월과 2월의 총 일수를 더한다.
입력된 일(b)을 day에 더하여, 2016년 1월 1일부터 a월 b일까지의 총 일수를 계산한다.- 요일 계산:
계산된 총 일수(day)를 7로 나눈 나머지를 구하여 해당 요일의 인덱스를 얻는다.
문제의 기준점인 2016년 1월 1일이 금요일이기 때문에, 나머지에 해당하는 인덱스를 사용하여 요일을 결정힌다.
예를 들어, 나머지가 0이면 "THU"(목요일), 1이면 "FRI"(금요일)가 되는것이다.- 결과 반환:
계산된 요일을 answer에 할당하고, 이를 반환한다.
import java.time.*;
class Solution {
public String solution(int a, int b) {
return LocalDate.of(2016, a, b).getDayOfWeek().toString().substring(0,3);
}
}
Java 8의 LocalDate
클래스를 활용하여 날짜를 처리한다. getDayOfWeek()
메서드를 통해 요일을 구하고, 문자열로 변환하여 출력한다.
LocalDate와 DayOfWeek 클래스는 Java 8에서 도입된 날짜와 시간 API의 일부로, 날짜 관련 연산을 간결하고 직관적으로 처리할 수 있게 해준다.
이 방법은 내부적인 계산 없이 표준 라이브러리를 사용하여 요일을 구하는 가장 간단하고 효율적인 방법이라고 생각한다.
import java.util.*;
class TryHelloWorld {
public String getDayName(int month, int day) {
Calendar cal = new Calendar.Builder().setCalendarType("iso8601")
.setDate(2016, month - 1, day).build();
return cal.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, new Locale("ko-KR")).toUpperCase();
}
public static void main(String[] args) {
TryHelloWorld test = new TryHelloWorld();
int a=5, b=24;
System.out.println(test.getDayName(a,b));
}
}
Calendar
클래스를 사용하여 더 복잡한 달력 처리를 수행하지만 코드가 길어질 수 있다.
Calendar 클래스는 Java의 초기 버전부터 사용되어 온 전통적인 날짜 및 시간 처리 클래스입니다. 더 복잡한 날짜 시간 계산이 필요할 때 유용하다.
이 방법은 더 많은 설정과 세부적인 날짜 시간 관리가 가능하지만, 코드가 길어지고 복잡해질 수 있다.
두 방법 모두 유효하지만, LocalDate를 사용하는 방법이 더 현대적이고 간결하다는 점을 기억하자
- Calendar를 사용하는 방법은 더 복잡한 날짜 시간 연산에 적합할 수 있다.