[Algorithms] programmers: 2016년

3 minute read

문제 설명

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));