Algorithm/Java
[프로그래머스/JAVA] 2016년
dbfl9911
2025. 1. 27. 10:23
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/12901
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
📌 문제 요약
2016년 1월 1일은 금요일입니다.
주어진 날짜(2016년 a월 b일)의 요일을 계산하는 함수 solution을 작성합니다.
- 요일은 일요일부터 토요일까지 SUN, MON, TUE, WED, THU, FRI, SAT 순서로 반환됩니다.
- 예를 들어, a = 5, b = 24인 경우, 결과는 "TUE"입니다.
[ 정답 코드 & 풀이 ]
📌 풀이
1. 요일 배열 정의
- 요일을 문자열 배열 dw에 저장합니다.
2016년 1월 1일은 금요일(FRI)이므로 "FRI"부터 시작합니다.
2. 월별 일수 배열 정의
- days 배열에 2016년 각 월의 일수를 저장합니다.
- 윤년이므로 2월은 29일까지 존재합니다.
3. 총 일수 계산
- 입력된 날짜가 기준 날짜(2016년 1월 1일)에서 몇 번째 날인지 계산합니다.
- 입력된 월 a까지의 총 일수를 계산하기 위해:
- 1월부터 a-1월까지의 일수를 sumday에 누적합니다.
- 입력된 날짜 b에서 1을 뺀 값을 추가하여 해당 월의 전날까지의 총 일수를 포함합니다.
- 입력된 월 a까지의 총 일수를 계산하기 위해:
4. 요일 계산
- 총 일수를 7로 나눈 나머지를 사용하여 요일 배열의 인덱스를 계산합니다.
- 나머지는 요일 배열(dw)에서 대응되는 요일을 반환합니다.
5. 결과 반환
- 계산된 요일 문자열을 반환합니다.
** 입력된 날짜 b에서 1을 뺀 값을 추가하는 이유?
예를 들어, 1월 1일과 1월 3일의 차이를 계산한다고 가정해봤을때,
- 1월 1일: 기준점으로 총 누적 일수는 0.
- 1월 3일까지의 날짜를 계산하려면,
1월 1일부터 2일 후라는 계산이 되어야 합니다.- b = 3을 그대로 사용하면 총 3일로 계산되는데,
이는 "1월 1일"도 포함되므로 실제보다 하루가 더해진 값입니다. - b - 1 = 3 - 1 = 2를 사용하면 "1월 1일" 전날을 기준으로 올바르게 계산됩니다.
- b = 3을 그대로 사용하면 총 3일로 계산되는데,
📌 정답 코드
class Solution {
public String solution(int a, int b) {
String answer = "";
// 윤년 일수 - 366일 (2월 끝일이 29일)
// 1월 ~ 12월 끝일
// 31,29,31,30,31,30,31,31,30,31,30,31
// 1. 해당 날짜까지 총 일수 계산
// 2016년 1월 1일은 금요일
String[] dw = {"FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"};
int[] days = {31,29,31,30,31,30,31,31,30,31,30,31};
// 해당 월 전까지의 일수 더하기
int sumday = 0;
for(int i = 0; i < a-1; i++) {
sumday += days[i];
}
// 해당 월의 일수 더하기
// b일 전날까지의 날짜 포함 (5월 23일까지)
sumday += (b - 1);
// 2. 해당 날짜 요일 계산
answer = dw[sumday % 7];
return answer;
}
}
반응형