반응형
문제링크
https://school.programmers.co.kr/learn/courses/30/lessons/12901
문제 설명
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) {
// 날짜의 요일을 담은 배열 (2016년 1월 1일은 금요일부터 시작)
String[] day = {"FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"};
// 각 월의 일수를 담은 배열
int[] month = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 30};
// 총 일 수를 담을 변수 선언
int answer = 0;
// a 이전의 총 일 수 더하기
for (int i = 0; i < a - 1; i++) {
answer += month[i];
}
// 남은 일수 더하기
answer += b - 1;
// 7로 나눈 나머지의 인덱스를 가진 요일 반환
return day[answer % 7];
}
}
코드 설명
주석 참고
- 2016년의 입력받은 날짜의 이전 날짜를 구하여 7로 나눈 인덱스를 통해 해당 날짜의 요일 구할 수 있다..
- 2016년은 금요일부터 시작하여 FRI부터 시작하는 요일 배열 선언한다.
- 2016년이 윤년임을 고려하여 각 월의 일 수를 담은 배열을 선언한다.
- a월 b일 이전의 날짜를 모두 구한다. a의 이전 달까지의 모든 일수를 더하기 위해 a - 1, 자바 인덱스는 0부터 시작함을 고려하여 b - 1만큼 더한다.
- 직전 날짜까지의 총 일수를 7로 나누어 day의 인덱스로 해당 요일을 구할 수 있다.
반응형
'코딩 테스트(Coding Test) > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 과일 장수 - 자바(Java) (0) | 2023.07.15 |
---|---|
[프로그래머스] 명예의 전당 (1) - 자바(Java) (0) | 2023.07.14 |
[프로그래머스] 추억 점수 - 자바(Java) (0) | 2023.07.12 |
[프로그래머스] 콜라 문제 - 자바(Java) (0) | 2023.07.11 |
[프로그래머스] 가장 가까운 같은 글자 - 자바(Java) (0) | 2023.07.10 |