Welcome! Everything is fine.

[프로그래머스/Lv.1] 2016년 - Java 본문

프로그래머스/Lv.1

[프로그래머스/Lv.1] 2016년 - Java

개발곰발 2024. 4. 18.
728x90

📌 문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

📌 풀이

처음에 어떻게 풀어야할지 막막했다. 왜 이런 날짜, 시간 계산이 잘 안되는지..결국 검색을 해서 보고 푼 문제이다.

 

먼저 변수를 선언해주었다. dayOfTheWeek에는 금요일부터 화요일까지의 요일을 담고(2016년 1월 1일이 금요일이므로), month에는 1월부터 12월까지 각 월의 일수를 담았다.

int answer = 0;
String[] dayOfTheWeek = {"FRI","SAT","SUN","MON","TUE","WED","THU"};
int[] month = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

 

그리고나서 [입력된 월 - 1]만큼 반복문을 돌며 입력된 월의 일수를 answer에 계속 더한다.(1 ~ 4월까지의 일수) 반복문이 끝나면 입력된 일수를 answer에 더한다. 1월 1일은 하루가 지난걸로 보지 않으므로 [b - 1]을 한다.

for (int i = 0; i < a - 1; i++) {
    answer += month[i];
}
        
answer += b - 1;

 

모든 계산이 끝나면 처음 만들었던 요일 배열에서 [answer % 7] 번째 인덱스에 있는 요일을 반환한다.

return dayOfTheWeek[answer % 7];

📌 전체 코드

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

 

LocalDate를 가져와 간단하게 풀 수 있었다. getDayOfWeek() 는 특정 날짜의 요일을 반환하는 메서드이다. LocalDate.of(2016, a, b).getDayOfWeek().toString()을 출력해보니 TUESDAY가 나왔다. 여기서 앞 3자리만 반환해야하므로 substring()으로 잘라준다.

import java.time.LocalDate;

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