프로그래머스 Lv1 중 서치 없이 푸는데 실패한 문제를 정리한 내용입니다.
정리 내용 출처는 아래를 참고해 주세요.
문제 설명
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" |
내가 푼 방식
문제에서 구하고자하는 년도가 2016년으로 제한되어 있기에 간단하게 풀 수 있는 방식이다.
2016년 1월 1일이 금요일이기 때문에 금요일을 시작으로 하는 요일 배열을 만들고, 각 월에 해당하는 일 수를 담은 배열을 만들어 이용한다.
입력값 a(월)을 이용해 month 배열에서 해당 월까지의 모든 월의 일 수를 더해주고, a월까지 도달하면 b(일)를 추가로 더해준다. 해당 값을 7로 나눈 나머지를 인덱스로 갖는 day 배열의 값을 return 하면 해당 월/일의 요일값을 구할 수 있다.
class Solution {
public String solution(int a, int b) {
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;
for (int i = 0; i < a - 1; i++) {
answer += month[i];
}
answer += b - 1;
return day[answer % 7];
}
다른 방식 1
Calendar 클래스를 이용한 방식으로, Calendar 클래스의 Month는 0부터 시작함을 주의해야한다.
class Solution {
public String solution(int a, int b) {
String day = "" ;
Calendar cal = Calendar.getInstance();
cal.set(2016,a -1,b);
int dayNum = cal.get(Calendar.DAY_OF_WEEK);
switch(dayNum){
case 1: day = "SUN";
break;
case 2: day = "MON";
break;
case 3: day = "TUE";
break;
case 4: day = "WED";
break;
case 5: day = "THU";
break;
case 6: day = "FRI";
break;
case 7: day = "SAT";
break;
}
return day ;
}
}
다른 방식 2
Java 8부터 사용 가능한 Java.time.* 을 이용한 간단한 풀이
class Solution {
public String solution(int a, int b) {
return LocalDate.of(2016, a, b).getDayOfWeek().toString().substring(0,3);
}
}
기억할 것
Calendar 클래스 - Date 클래스와 마찬가지로 날짜와 시간을 다루는 클래스.
https://pearhj.tistory.com/167
[JAVA] Calendar 클래스
Calendar Class Calendar 클래스는 Date 클래스처럼 날짜와 시간을 다루는 클래스로 java.util 패키지에 포함되어 있다. 해당 클래스가 새로 추가되면서 기존 Date 클래스의 대부분의 메소드는 deprecated되어
pearhj.tistory.com
Java.time 패키지
https://pearhj.tistory.com/168
* https://school.programmers.co.kr/learn/courses/30/lessons/12901
'Coding Test' 카테고리의 다른 글
[프로그래머스] Lv.1 신규 아이디 추천 (0) | 2024.04.22 |
---|---|
[프로그래머스] Lv.1 기사단원의 무기 (0) | 2024.04.22 |
[프로그래머스] Lv.1 바탕화면 정리 (0) | 2024.04.17 |
[프로그래머스] Lv.1 카드 뭉치 (0) | 2024.04.17 |
[프로그래머스] Lv.1 명예의 전당 1 (0) | 2024.04.15 |