직접 구현
class Solution {
public String solution(int a, int b) {
int[] month = {31,29,31,30,31,30,31,31,30,31,30,31}; //1~12월 일수
String[] day = {"SUN","MON","TUE","WED","THU","FRI","SAT"};
int[] calendar = new int[366]; //2016년의 365일의 '요일' 저장
for(int i=0; i<calendar.length; i++){
calendar[i] = (i+5)%7; // 1/1=금요일=day[5]
}
int today = 0;
for(int i=0; i<a-1; i++){
today += month[i];
}
today += b-1;
return day[calendar[today]];
}
}
1~(a-1)월까지의 일 수 + b일 을 계산하여, a월b일까지의 총 일 수를 구한다.
2016년 1월1일이 금요일이므로, 이를 통해 1월1일부터 n일이 지난 후에는 무슨 요일인지를 출력한다.
1. 1~12월 각각의 일 수를 저장한 배열을 이용한다. (month[])
2. calendar[] 배열을 통해 총 365일의 '요일'을 나타내는 숫자를 저장한다. (0:일,1:월, ... 7:토)
이를 계산하기 위해, 2016년 1월 1일이 금요일(=5)임을 이용한다.
1월1일=금요일=5='0번째 날' 로 표현하면, i번째 날은 (i+5)%7 로 표현할 수 있다.
3. 1월1일부터 a월b일까지의 총 일 수를 계산하는 것은, a월b일이 n번째 날이라는 걸 의미한다.
따라서 calendar[n번째날]의 값을 통해 무슨 요일인지를 알 수 있다.
Calendar 클래스 이용
import java.util.Calendar;
class Solution {
public String solution(int a, int b) {
String answer="";
try{
Calendar cal = Calendar.getInstance();
cal.set(2016, a-1, b); //1월=0
String[] week = {"SUN","MON","TUE","WED","THU","FRI","SAT"};
answer = week[cal.get(Calendar.DAY_OF_WEEK)-1]; //일요일=1
}
catch(Exception e){
e.printStackTrace();
}
return answer;
}
}
이 문제는 진짜 2016년 1월 1일이 금요일이다.
그래서 Calendar 클래스를 이용해 진짜 날짜의 요일을 구하면 되는 문제였다.
하지만! 진짜 날짜가 아닌, 문제에서 임의로 정한 날짜라면 사용 못하는 방법이다.
'1d-1c > Programmers' 카테고리의 다른 글
Level1_두 개 뽑아서 더하기 (C++) (0) | 2021.04.05 |
---|---|
Level1_수박수박수박수박수박수? (JAVA) (0) | 2020.12.14 |
Level1_문자열 내림차순으로 배치하기 (JAVA) (0) | 2020.12.13 |
Level1_정수 제곱근 판별 (JAVA) (0) | 2020.12.13 |
Level1_다트게임 (JAVA) (0) | 2020.12.11 |