TIL | [알고리즘] 2016년(Java)

hyemin·2022년 3월 12일
0

알고리즘

목록 보기
13/38
post-thumbnail

THINKING

  1. 기준점이 금요일이니까 배열 day에 "FRI"부터 순서대로 넣기
  2. 배열 date에 월별 마지막일 넣기
  3. [a-1]까지 배열 date에서 totalDate에 더하기
  4. totalDate에 b일만큼 더하기
  5. day[(totalDate % 7) - 1](인덱스가 0부터 시작하니까 1을 빼줌)로 요일 찾기

내 풀이

class Solution {
    public String solution(int a, int b) {
        String answer = "";
        String[] day = {"FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"};
        int[] date = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        int totalDate = 0;
        
        for (int i = 0; i < a - 1; i++) {
            totalDate+=date[i];
        }
        totalDate += b - 1;
        answer = day[totalDate % 7];
        return answer;
    }
}

처음에는 생각했던 대로

totalDate += b;
amswer = day[(totalDate % 7) - 1];

을 사용해서 제출했으나 몇몇 케이스에서 런타임 에러가 발생했다.

배열안에서 계산 과정이 이뤄져 런타임 에러가 발생하는 것 같아서 변수에서 먼저 1을 빼주는 코드로 변경했다.

totalDate += b - 1;
amswer = day[totalDate % 7];

다른 풀이

import java.time.*;

class Solution {
    public String solution(int a, int b) {
        return LocalDate.of(2016, a, b).getDayOfWeek().toString().substring(0, 3);
    }
}

배운 것

LocalDate

Java에서 날짜를 표현할 때 사용하는 클래스이다.
예전에는 Calender나 Date 클래스로 시간/날짜를 표현했지만 여러 문제점이 발견되었고 Java8에서 문제를 해결하기 위해 LocalDate, LocalTime, LocalDateTime 클래스가 생겼다.

사용법

// 컴퓨터의 현재 날짜 정보
LocalDate currentDate = LocalDate.now();	// 2022-03-12

// 내가 지정한 날짜
LocalDate myDate = LocalDate.of(int year, int month, int day);	// 년, 월, 일

// 요일 나타내기
getDateOfWeek(); 	// MONDAY, THUSEDAY, ....

다른 메소드도 많지만, 이 문제에 사용된 메소드만 나열했다.

// 2016년 a월 b일 요일 가져오기
LocalDate.of(2016, a, b).getDayOfWeek()

0개의 댓글