[Java] 알고리즘, "2016년 a월 b일을 맞춰라"

문제 설명

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



나의 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
  public static String solution(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;
    }
}
cs


일단, 월/일 과 요일과의 상관관계는 없습니다. 올해 1월 1일은 목요일이 되고 내년은 금요일이 될수 있습니다. 

하지만 일주일이 매번 반복되므로 날짜가 하루 증가할때마다 요일이 하나씩 바뀌고 이 요일은 7가지가 있다는 것을 캐치하셔야 합니다.

기준날짜인 1월 1일을 첫번째(1) 날짜로 삼고 1월 2일을 두번째(2) 날짜로 삼으면 물론, 그 전날짜는 목요일(0)이 되겠지요?

총 날짜는 1일이 증가하고 요일도 1개 증가합니다. 이러한 규칙을 이용해 전체 변화한 날짜에서 7을 나눈 나머지가 요일의 배열의 index로 작용하여

해당 요일을 반환하게 되는 것입니다.


다른사람의 풀이

엄청 노력파이신 분을 소개합니다...


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
class 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";
          else
            answer = "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";
          else
            answer = "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";
          else
            answer = "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";
          else
            answer = "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";
          else
            answer = "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";
          else
            answer = "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";
          else
            answer = "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";
          else
            answer = "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";
          else
            answer = "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";
          else
            answer = "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";
          else
            answer = "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";
          else
            answer = "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));
    }
}
cs

자바의 라이브러리는 이런식으로 탄생합니다... 여러분....


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class 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;
    }
}
cs
wjd
ㅇ저랑 생각은 비슷하셨는데 더 효율적이신것 같은..... 더노력하겠습니다....ㅠㅠ
ddd

윤년이 나와서 반가워서 제가 아는 한 설명해보자면

윤년은 4년에 한번 돌아오는 2월의 날짜수가 29일인 해입니다. 월드컵처럼 4년만에 무조건 돌아오는 것이 아닌 특별한 규칙이 있다고합니다.

 - 4로 나누어 떨어지는 해는 윤년, 그 밖의 해는 평년으로 한다.

 - 4로 나누어 떨어지지만 100으로 나누어 떨어지는 해는 평년으로 한다.

 - 단, 400으로 나누어 떨어지는 해는 윤년으로 한다


년 월 일을 입력하면 요일을 구하는 등과 같은 알고리즘을 해결할 때, 가장 골치아프게하는 녀석이 바로 윤년입니다. 

위의 세가지 조건을 if문으로 만들어 윤년에 해당하는 해이면 하루를 더해 29일이 되게 만들어야 합니다.

학원을 다녔을 때, 자바수업중 윤년을 해결했던 기억이 나서 정리해보았습니다.

댓글

Designed by JB FACTORY