https://school.programmers.co.kr/learn/courses/30/lessons/12901
문제 접근
년도가 2016년에 한정되어있다.
윤년이라 2월은 29일까지
1 <= a <= 12
1 <= b <= 30, 31 (2월은 29일)
마지막 날이 30, 31인 달 부터 구분
1, 3, 5, 7, 8, 10, 12 → 31
2, 4, 6, 9, 11 → 29, 30
요일마다 숫자 부여해서 요일 계산
SUN = 0, MON = 1, TUE = 2, WED = 3, THU = 4, FRI = 5, SAT = 6
시작 기준점 1월 1일 금요일
class Solution {
public String solution(int a, int b) {
String answer = "";
int month = 1;
int day = 1;
int dayOfWeek = 5;
int maxDay = 0;
while (true) {
if (month == a && day == b) break;
day++;
dayOfWeek++;
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) maxDay = 31;
else if (month == 4 || month == 6 || month == 9 || month == 11) maxDay = 30;
else maxDay = 29;
if (day > maxDay) {
day = 1;
month++;
}
if (dayOfWeek > 6) dayOfWeek = 0;
}
return dayOfWeek(dayOfWeek);
}
public String dayOfWeek(int dayOfWeek) {
if (dayOfWeek == 0) return "SUN";
else if (dayOfWeek == 1) return "MON";
else if (dayOfWeek == 2) return "TUE";
else if (dayOfWeek == 3) return "WED";
else if (dayOfWeek == 4) return "THU";
else if (dayOfWeek == 5) return "FRI";
else if (dayOfWeek == 6) return "SAT";
else return "이건 나오면 안돼";
}
}
다른 사람 풀이
매 월의 최대 일수를 배열로 만들어 놓으니 더 깔끔해보인다.
해당 풀이는 전 달의 최대 일수에서 구하고자하는 요일의 일수만큼 더해서 그 수의 나머지로 요일을 구한다.
class TryHelloWorld
{
public String getDayName(int a, int b) {
String answer = "";
String[] day = { "FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU" };
int[] date = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int allDate = 0;
for (int i = 0; i < a - 1; i++) {
allDate += date[i];
}
allDate += (b - 1);
answer = day[allDate % 7];
return answer;
}
public static void main(String[] args)
{
TryHelloWorld test = new TryHelloWorld();
int a=5, b=24;
System.out.println(test.getDayName(a,b));
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / 덧칠하기 / JAVA] (0) | 2023.03.24 |
---|---|
[프로그래머스 / 폰켓몬 / JAVA / 해시] (0) | 2023.03.23 |
[프로그래머스 / 문자열 내 마음대로 정렬하기 / JAVA] (0) | 2023.03.22 |
[프로그래머스 / 소수 찾기 / JAVA] (0) | 2023.03.22 |
[프로그래머스 / 소수 만들기 / JAVA] (0) | 2023.03.21 |
댓글