[Algorithms] programmers: 2016년
문제 설명
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 |
풀이
Brute force
Javscript
1// a는 월, b는 일
2// Date(2016, a - 1, b) 2016년, a-1월, b일 (0이 1월이므로 a에 -1)
3// getDay()는 요일 반환. 일요일부터 토요일까지 0~6으로 반환
4function solution(a, b) {
5 let dat = new Date(2016, a - 1, b).getDay();
6 console.log(dat);
7 return ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT'][new Date(2016, a - 1, b).getDay()];
8}
Java
1import java.util.HashMap;
2import java.util.Map;
3
4public class HelloWorld {
5 public static void main(String[] args) {
6 Solution ref = new Solution();
7 System.out.println(ref.findDay(2,1));
8 }
9}
10
11
12class Solution {
13 public String findDay(int a, int b) {
14 //2016년 1월 1일 금요일
15 //1. 입력되는 날짜가 1월 1일로부터 며칠 떨어져 있는지 계산하자.
16 //1 31 / 2 29 / 3 31 / 4 30 / 5 31 / 6 30 / 7 31 / 8 31 / 9 30 / 10 31 / 11 30 / 12 31
17 Map<Integer, Integer> monthSet = new HashMap<>();
18 monthSet.put(1, 31);
19 monthSet.put(2, 29);
20 monthSet.put(3, 31);
21 monthSet.put(4, 30);
22 monthSet.put(5, 31);
23 monthSet.put(6, 30);
24 monthSet.put(7, 31);
25 monthSet.put(8, 31);
26 monthSet.put(9, 30);
27 monthSet.put(10, 31);
28 monthSet.put(11, 30);
29 monthSet.put(12, 31);
30
31 int dayLength = 0;
32
33 for (int i = 1; i < a; i++) {
34 dayLength += monthSet.get(i);
35 }
36
37 dayLength += b;
38 //1월 1일은 거리에 포함되서는 안된다. 따라서 1 감소.
39 dayLength--;
40
41
42 //2. 계산된 일수를 7로 나누어 나머지를 구하자.
43 int targetNo = dayLength % 7;
44 String result = null;
45
46 if(targetNo == 0){
47 result = "FRI";
48 }else if(targetNo == 1){
49 result = "SAT";
50 }else if(targetNo == 2){
51 result = "SUN";
52 }else if(targetNo == 3){
53 result = "MON";
54 }else if(targetNo == 4){
55 result = "TUE";
56 }else if(targetNo == 5){
57 result = "WED";
58 }else if(targetNo == 6){
59 result = "THU";
60 }
61
62 //3. 결과에 따른 요일을 반환하자.
63
64 return result;
65 }
66}
다른사람 풀이
풀이1
1function getDayName(a,b){
2 var date = new Date(2016, (a - 1), b);
3 return date.toString().slice(0, 3).toUpperCase();
4}
5
6//아래 코드는 테스트를 위한 코드입니다.
7console.log(getDayName(5,24));
풀이2
1function getDayName(a,b){
2 let day = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]
3 let date = new Date(`${a}, ${b}, 2016`).getDay()
4 return day[date]
5}
6
7//아래 코드는 테스트를 위한 코드입니다.
8console.log(getDayName(5,24));