문제 설명
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일같은 날짜는 주어지지 않습니다)
나의 솔루션
import java.util.Arrays;
public class Solution {
public static String solution(int a, int b) {
// 요일 배열에 요일 담기
String[] year = new String[366];
String[] week = { "FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU" };
int i = 0;
while (i < year.length) {
for (int j = 0; j < week.length; j++) {
if (i == 366)
break;
year[i] = week[j];
i++;
}
}
// 몇번째 날짜인지 계산해서 요일 배열에서 확인
int inputDate = 0;
int[] date = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
a = a - 1;
for (int j = 0; j < a; j++)
inputDate += date[j];
inputDate += b;
return year[inputDate - 1];
}
}
개선한 코드
/*copyright© 2019. mh. All rights reserved.*/
class Solution{
public static String solution2(int a, int b) {
// 요일 배열에 요일 담기
String[] day_of_week = {"FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"};
int[] day_of_month = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int answer_day_point = 0;
// 몇번째 날짜인지 계산해서 요일 배열에서 확인 월(a), 일(b)
a = a -1;
for(int i = 0; i < a; i++) {
answer_day_point += day_of_month[i];
}
answer_day_point += (b-1);
return day_of_week[answer_day_point%7];
}
}
- 전체 요일을 배열에 담으면 성능이 떨어짐
- 날짜들을 일렬로 나열했을 때 7로 나눈 나머지는 항상 0~6이라는 규칙을 찾아 요일 배열과 맵핑
다른 사람 풀이
class Solution{
public String getDayName(int a, int b)
{
String answer = "";
int daySum = 0;
int day;
String[] myday = {"FRI", "SAT", "SUN", "MON", "TUE", "WED" ,"THU"};
for(int i=1; i<a; i++){
if(i == 2){
daySum += 29;
} else if(i==4 || i==6 || i==9 || i==11){
daySum += 30;
} else{
daySum += 31;
}
}
daySum += b - 1;
day = daySum % 7;
return answer = myday[day];
}
}
- 처음 구상했던 월별 if~else문을 이용한 로직. for문을 돌면서 값을 계속 누적해주면 된다. 이하동문.
'Algorithms & CS' 카테고리의 다른 글
[Java] 프로그래머스 - 같은 숫자는 싫어 (0) | 2019.07.18 |
---|---|
[JAVA] 프로그래머스 - 가운데 글자 가져오기 (0) | 2019.07.16 |
[JAVA] 프로그래머스 - K번째수 (0) | 2019.07.12 |
[JAVA] 프로그래머스 - 모의고사 (0) | 2019.07.11 |
[JAVA] 프로그래머스 - 완주하지 못한 선수 (0) | 2019.07.10 |