읽고 쓰고 씹고 즐기고/Algorithm
프로그래머스 - 2016년<Lavel 1> LocalDate
Resian
2020. 4. 8. 18:15
문제 설명
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일같은 날짜는 주어지지 않습니다)
문제 해석
2016년은 변하지 않기에 월과 일만 검증하면 된다.
private Map<Integer, String> weeks = new HashMap<>();
public String solution(int a, int b) {
int year = 2016;
LocalDate localDate = null;
if(a > 0 && a < 13) {
localDate = LocalDate.of(year, a, 1);
if(b > 0 && b <= localDate.lengthOfMonth()) {
localDate = LocalDate.of(year, a, b);
}
}
insert();
return getWeek(localDate.getDayOfWeek().getValue());
}
private String getWeek(int week){
return weeks.get(week);
}
private void insert() {
weeks.put(1, "MON");
weeks.put(2, "TUE");
weeks.put(3, "WED");
weeks.put(4, "THU");
weeks.put(5, "FRI");
weeks.put(6, "SAT");
weeks.put(7, "SUN");
}
YearMonth Class로 특정 월의 일 수 찾기.
if(a > 0 && a < 13) {
localDate = LocalDate.of(year, a, 1);
YearMonth yearMonth =YearMonth.from(localDate);
int months = yearMonth.lengthOfMonth();
if(b > 0 && b <= months) {
localDate = LocalDate.of(year, a, b);
}
}
회고
코딩을 시작한 지 얼마 안 됐을 때는 이미 구현되어있는 기능도 모르고 검색하는 법도 미숙하여 이 문제를 풀지 못했던 기억이 있다.
그런 의미에서 과거보다 확실히 많이 발전했다는 것을 느꼈고,
YearMonth Class는 처음 접하게 되었는데 LocalDate와 별개의 class로 있는 이유는 정확히 모르지만
다음에 기회가 되면 Code에 적용해봐야겠다.