풀이1 > Calendar와 switch-case를 이용하여 풀이
import java.util.Calendar;
class Solution {
public String solution(int a, int b) {
String day = "";
Calendar cal = Calendar.getInstance();
// 년도를 2016년으로 세팅
cal.set(Calendar.YEAR, 2016);
// Calendar.MONTH의 1월은 0이기 때문에 입력받는 달 a에서 1을 빼주고 세팅
cal.set(Calendar.MONTH, a-1);
// 일을 b로 세팅
cal.set(Calendar.DATE, b);
// Calendar.DAY_OF_WEEK의 일요일은 1로 시작하기 때문에 요일을 dayNum으로 세팅
int dayNum = cal.get(Calendar.DAY_OF_WEEK);
// Calendar.DAY_OF_WEEK의 요일은 1부터 시작하기 때문에 case 1부터 시작
switch(dayNum){
case 1:
day="SUN";
break;
case 2:
day="MON";
break;
case 3:
day="TUE";
break;
case 4:
day="WED";
break;
case 5:
day="THU";
break;
case 6:
day="FRI";
break;
case 7:
day="SAT";
break;
}
return day;
}
}
풀이2 > Enum을 이용한 풀이
class Solution {
public String solution(int month, int day) {
int sumDays = 0;
for(int i = 0 ; i < month; i++)
sumDays += getDayOfMonth(i+1);
sumDays -= (getDayOfMonth(month)-day);
int idx = sumDays%7-1 < 0? 6:sumDays%7-1;
return DAY.values()[idx].name();
}
public static int getDayOfMonth(int month) {
return Month.values()[month-1].day;
}
enum DAY{
FRI,SAT,SUN,MON,TUE,WED,THU
}
enum Month{
JEN(1,31),
FEB(2,29),
MAR(3,31),
APR(4,30),
MAY(5,31),
JUN(6,30),
JUL(7,31),
AUG(8,31),
SEP(9,30),
OCT(10,31),
NOV(11,30),
DEC(12,31);
private int month;
private int day;
Month(int month,int day){
this.month = month;
this.day = day;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
public int getDay() {
return day;
}
public void setDay(int day) {
this.day = day;
}
}
}
풀이3 > 배열과 반복문을 이용한 풀이
class Solution {
public String solution(int a, int b) {
String[] day =new String[] { "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT",};
int[] date =new int[] {0,31,29,31,30,31,30,31,31,30,31,30,31};
int count = 0;
for(int i = 1; i < a; i++){
count += date[i];
}
count += b;
return day[(count + 4) % 7];
}
}