연습문제
🔥 2016년 🔥
2016년 1월 1일은 금요일이다. 두 수 a,b를 입력받아 2016년 a월 b일이 무슨요일인지 리턴하는 함수 solution을 완성해보자.
a | b | return |
---|---|---|
5 | 4 | "TUE" |
문제를 보고 어떻게 풀어야하는거지? 생각한 문제는 처음이었다.
아무생각도 들지 않았다.
그래도 어떻게든 풀어본다고 해봤는데
import java.util.*;
class Solution {
public String solution(int a, int b) {
String[] day = {"SUN","MON","TUE","WED","THU","FRI","SAT"};
ArrayList<String> days = new ArrayList<>(Arrays.asList(day));
String[] date = new String[12]; //각월의 시작 요일을 대입
String answer = "";
int n = 5;
//시작요일
for(int i=1;i<date.length;i++){
date[0] = "FRI";
if(i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10){
n = n+3;
if(n >= day.length){
n = n - day.length;
}
date[i] = day[n];
}else if(i == 4 || i == 6 || i == 9 || i == 11){
n = n+2;
if(n>=day.length){
n = n - day.length;
}
date[i] = day[n];
}else if(i==2){
n = 2;
date[i] = day[n];
}
}
String start = date[a-1]; //각 월의 시작 요일
int index = days.indexOf(start); //시작하는 요일의 인덱스값
int f = index+(b-1)%7;
if(f>day.length){
f = f-day.length;
answer = day[f];
}else if(f == day.length){
answer = day[index-1];
if(a==1){
if(index+2 >= day.length){
int i = index+2;
answer = day[i - day.length];
}else{
answer = day[index+2];
}
}
}else{
answer = day[f];
}
return answer;
}
}
3번테스트에서 오류가 났고 결국 해결하지 못했다.
class Solution {
public String solution(int a, int b) {
String answer = "";
String[] day = {"FRI","SAT","SUN","MON","TUE","WED","THU"};
int[] last = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int date = 0;
for(int i=0;i<a-1;i++){
date += last[i];
}
date += b-1;
answer = day[date%7];
return 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.time api를 이용한 풀이
처음에 풀었던 방법으로는 해결할 수 없는걸까...