⏱소요 시간 - 35분
🔑해결 방법
사실 이 문제는 요일을 구하는 복잡한 알고리즘이 이미 존재할 것 같아서 구글링해서 코드를 짰다.ㅎㅎ
찾아보니 별게 없어서 스스로 생각해볼껄... 후회가 되는 문제. 다음에 꼭 다시 풀어보자!
규칙을 한 번에 알 수 없는 문제의 경우, 쉽게 알 수 있는 예로부터 수식을 얻어내면 간편하다.
1월 8일, 9일 정도면 금요일, 토요일이라는걸 바로 알 수 있으니 해당 예시로 아래 수식을 계산해보자.
1. for문
같은 1월이므로 for문을 통해 얻는 sum 값은 초기화 상태 그대로의 0이다.
2. sum = (sum + b - 1);
1월 8일 : 0 + 8 - 1 = 7 --> sum = 7 값이 나오는 것을 확인할 수 있다.
1월 9일 : 0 + 9 - 1 = 8 -- > sum = 8 값이 나오는 것을 확인할 수 있다.
그렇다면 sum 값을 통해 week[] 배열의 값을 얻고 싶다면 어떻게 활용할까?
/를 해볼지 %를 해볼지 이것저것 생각을 해보자.
3. week[sum % 7]
1월 8일 : 7 % 7 = 0 --> week[0] -> "FRI"
1월 9일 : 8 % 7 = 1 --> week[1] -> "SAT"
🔎소스 코드
package step1;
// 2016년
public class Ex07 {
public static void main(String[] args) {
System.out.println(solution(5, 23));
}
public static String solution(int a, int b) {
String answer = "";
int[] month = { 31, 29, 31, 30, 31, 30,
31, 31, 30, 31, 30, 31 }; // 1~12월 날짜 수 (윤년)
String[] week = { "FRI", "SAT", "SUN", "MON",
"TUE", "WED", "THU" }; // 1월 1일이 금요일이므로 금요일부터
int sum = 0; // 날짜 합계가 담길 변수
// 입력으로 들어온 달의 전까지 모든 달의 수를 더함
for(int i = 0; i < a - 1; i++) {
sum += month[i];
}
/*
+b : 입력받은 날짜 더해주기
-1 : 1월 1일 빼주기
%7 : week.length만큼 나눠주기
*/
sum = (sum + b - 1);
answer = week[sum % 7];
return answer;
}
}
'ALGORITHM' 카테고리의 다른 글
[프로그래머스 Java] 가운데 글자 가져오기 (0) | 2021.01.10 |
---|---|
[프로그래머스 Java] 3진법 뒤집기 (0) | 2021.01.10 |
[프로그래머스 Java] K번째 수 (0) | 2021.01.09 |
[프로그래머스 Java] 체육복 (0) | 2021.01.09 |
[프로그래머스 Java] 모의고사 (0) | 2021.01.08 |