-
[Java] 자바 알고리즘 / "2016년 a월 b일을 맞춰라"카테고리 없음 2019. 9. 30. 20:53반응형
문제 설명
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를 반환하세요.
제한 조건
2016년은 윤년입니다.
2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다)
입출력 예
a b result
5 24 TUE
12 31 SAT
123456789101112131415161718192021class TryHelloWorld {public static String test(int a, int b) {String answer = "";//목0 금1 토2 일3 월4 화5 수6 -> 요일/나머지구조//1 . 1 금(1 번째 일이라했을때) -> 1.2 토 (2 번째) 이런식으로 구하자int _31 = 31;int _30 = 30;int _28 = 28;int yoon = 29;int day = 0; //이걸 7로 나눈다.int month[] = {_31,yoon,_31,_30,_31,_30,_31,_31,_30,_31,_30,_31};String[] yoEil = {"THU","FRI","SAT","SUN","MON","TUE","WED"};for(int i =0; i<a-1; i++) {day+=month[i];}day+=b;answer = yoEil[(day%7)];return answer;}}Dev. 흑구 Ver.
-해설
일단, 월/일 과 요일과의 상관관계는 없습니다. 올해 1월 1일은 목요일이 되고 내년은 금요일이 될수 있음.
하지만 일주일이 매번 반복되므로 날짜가 하루 증가할때마다 요일이 하나씩 바뀌고 이 요일은 7가지가 있다는 것을 캐치해야함
기준날짜인 1월 1일을 첫번째(1) 날짜로 삼고 1월 2일을 두번째(2) 날짜로 삼으면 물론, 그 전날짜는 목요일(0)이 됨
총 날짜는 1일이 증가하고 요일도 1개 증가함. 이러한 규칙을 이용해 전체 변화한 날짜에서 7을 나눈 나머지가 요일의 배열의 index로 작용하여 해당 요일을 반환하게 됨.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208class TryHelloWorld{public String getDayName(int a, int b){String answer = "";switch(a) {case 1:if(b % 7 == 1)answer = "FRI";else if(b % 7 == 2)answer = "SAT";else if(b % 7 == 3)answer = "SUN";else if(b % 7 == 4)answer = "MON";else if(b % 7 == 5)answer = "TUE";else if(b % 7 == 6)answer = "WED";elseanswer = "THU";break;case 2:if(b % 7 == 1)answer = "MON";else if(b % 7 == 2)answer = "TUE";else if(b % 7 == 3)answer = "WED";else if(b % 7 == 4)answer = "THU";else if(b % 7 == 5)answer = "FRI";else if(b % 7 == 6)answer = "SAT";elseanswer = "SUN";break;case 3:if(b % 7 == 1)answer = "TUE";else if(b % 7 == 2)answer = "WED";else if(b % 7 == 3)answer = "THU";else if(b % 7 == 4)answer = "FRI";else if(b % 7 == 5)answer = "SAT";else if(b % 7 == 6)answer = "SUN";elseanswer = "MON";break;case 4:if(b % 7 == 1)answer = "THU";else if(b % 7 == 2)answer = "FRI";else if(b % 7 == 3)answer = "SAT";else if(b % 7 == 4)answer = "SUN";else if(b % 7 == 5)answer = "MON";else if(b % 7 == 6)answer = "TUE";elseanswer = "WED";break;case 5:if(b % 7 == 1)answer = "SUN";else if(b % 7 == 2)answer = "MON";else if(b % 7 == 3)answer = "TUE";else if(b % 7 == 4)answer = "WED";else if(b % 7 == 5)answer = "THU";else if(b % 7 == 6)answer = "FRI";elseanswer = "SAT";break;case 6:if(b % 7 == 1)answer = "WED";else if(b % 7 == 2)answer = "THU";else if(b % 7 == 3)answer = "FRI";else if(b % 7 == 4)answer = "SAT";else if(b % 7 == 5)answer = "SUN";else if(b % 7 == 6)answer = "MON";elseanswer = "TUE";break;case 7:if(b % 7 == 1)answer = "FRI";else if(b % 7 == 2)answer = "SAT";else if(b % 7 == 3)answer = "SUN";else if(b % 7 == 4)answer = "MON";else if(b % 7 == 5)answer = "TUE";else if(b % 7 == 6)answer = "WED";elseanswer = "THU";break;case 8:if(b % 7 == 1)answer = "MON";else if(b % 7 == 2)answer = "TUE";else if(b % 7 == 3)answer = "WED";else if(b % 7 == 4)answer = "THU";else if(b % 7 == 5)answer = "FRI";else if(b % 7 == 6)answer = "SAT";elseanswer = "SUN";break;case 9:if(b % 7 == 1)answer = "THU";else if(b % 7 == 2)answer = "FRI";else if(b % 7 == 3)answer = "SAT";else if(b % 7 == 4)answer = "SUN";else if(b % 7 == 5)answer = "MON";else if(b % 7 == 6)answer = "TUE";elseanswer = "WED";break;case 10:if(b % 7 == 1)answer = "SAT";else if(b % 7 == 2)answer = "SUN";else if(b % 7 == 3)answer = "MON";else if(b % 7 == 4)answer = "TUE";else if(b % 7 == 5)answer = "WED";else if(b % 7 == 6)answer = "THU";elseanswer = "FRI";break;case 11:if(b % 7 == 1)answer = "TUE";else if(b % 7 == 2)answer = "WED";else if(b % 7 == 3)answer = "THU";else if(b % 7 == 4)answer = "FRI";else if(b % 7 == 5)answer = "SAT";else if(b % 7 == 6)answer = "SUN";elseanswer = "MON";break;case 12:if(b % 7 == 1)answer = "THU";else if(b % 7 == 2)answer = "FRI";else if(b % 7 == 3)answer = "SAT";else if(b % 7 == 4)answer = "SUN";else if(b % 7 == 5)answer = "MON";else if(b % 7 == 6)answer = "TUE";elseanswer = "WED";break;}return answer;}public static void main(String[] args){TryHelloWorld test = new TryHelloWorld();int a=5, b=24;System.out.println(test.getDayName(a,b));}}Others Ver.1
12345678910111213141516171819202122232425class TryHelloWorld{public String getDayName(int a, int b){String answer = " ";int[] monthDay={31,29,31,30,31,30,31,31,30,31,30,31};for (int i = 1; i < a; i++) {b+=monthDay[i-1];}switch(b%7){case 3:answer="SUN";break;case 4:answer="MON";break;case 5:answer="TUE";break;case 6:answer="WED";break;case 0:answer="THU";break;case 1:answer="FRI";break;case 2:answer="SAT";break;}return answer;}}Others Ver.2
#윤년이란?
윤년은 4년에 한번 돌아오는 2월의 날짜수가 29일인 해입니다. 월드컵처럼 4년만에 무조건 돌아오는 것이 아닌 특별한 규칙이 있다.
- 4로 나누어 떨어지는 해는 윤년, 그 밖의 해는 평년으로 한다.
- 4로 나누어 떨어지지만 100으로 나누어 떨어지는 해는 평년으로 한다.
- 단, 400으로 나누어 떨어지는 해는 윤년으로 한다
반응형