-
[프로그래머스/JAVA] 2016년Algorithm/Java 2025. 1. 27. 10:23
https://school.programmers.co.kr/learn/courses/30/lessons/12901
📌 문제 요약
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; } }
반응형'Algorithm > Java' 카테고리의 다른 글
[프로그래머스/JAVA] 튜플 (2019 카카오 개발자 겨울 인턴십 문제) (1) 2025.01.28 [프로그래머스/JAVA] [1차] 캐시 (2018 KAKAO BLIND RECRUITMENT 문제) (1) 2025.01.27 [프로그래머스/JAVA] H-Index (0) 2025.01.24 [프로그래머스/JAVA] 행렬의 곱셈 (0) 2025.01.23 [프로그래머스/JAVA] n^2 배열 자르기 (0) 2025.01.23