문제 설명
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" |
⭕ 풀이
class Solution {
public String solution(int a, int b) {
int[] dateArr = {31,29,31,30,31,30,31,31,30,31,30,31};
String[] dayArr = {"THU","FRI","SAT","SUN","MON","TUE","WED"};
int days = 0;
for(int i=1;i<a;i++) {
days += dateArr[i-1];
}
days += b;
return dayArr[days%7];
}
}
우선 문제를 다시 읽어보자
2016년은 윤년이다 즉 2월달이 29일인 해 이며 2015년 2017년 이렇게 2016년이 아닌 해들은 제외된다.
무조건 2016년만 계산하면되므로 Date관련 패키지를 import하여 사용할 필요는 없을것 같다.
따라서 1월부터 12월까지의 각 월의 일수를 배열로 만들었다.
이후 1월 1일은 금요일이므로 1인덱스의 자리를 "FRI" 로 하여 이걸 기준으로
금, 토, 일, 월, 화, 수 ----- 목 배열을 만들었다.
이후 입력받은 월,일 까지의 총 날짜수를 더한 뒤 7로 나눈나머지를 dayArr의 인덱스로 사용하여 출력해주었다.
입출력예인 5월 24일로 가정해보자
1월전부, 2월전부, 3월전부, 4월전부 + 24일이 1월1일부터 5월24일까지의 총 날짜수가 될것이다.
따라서 1월이라면 dateArr의 [0]번째인 1월의 날짜를 더할 필요가 없으므로 days에는 dateArr[i-1]을 더하는것이다.
a로 5월을 입력받았으므로 1월부터 4월까지의 날짜를 더한 뒤
b로 입력받은 24만큼은 더해준다.
-> 145
이렇게 계산된 145를 7로 나눈 나머지는 5가 되고
dayArr[5] -> "TUE"를 반환해준다.
-출처
https://school.programmers.co.kr/learn/courses/30/lessons/12901
'Algorithm > Programmers(Java)' 카테고리의 다른 글
| [프로그래머스/Lv.1] 소수 찾기 (0) | 2023.01.06 |
|---|---|
| [프로그래머스/Lv.1] 포켓몬 (0) | 2023.01.05 |
| [프로그래머스/Lv.1] 두 개 뽑아서 더하기 (0) | 2023.01.03 |
| [프로그래머스/Lv.1] 숫자 문자열과 영단어 (0) | 2023.01.02 |
| [프로그래머스/Lv.1] K번째수 (0) | 2022.12.30 |