Language/JAVA

[프로그래머스] 2016년

paran21 2022. 1. 15. 14:12

요일을 구하는 문제로,

입력하는 날 이전의 모든 일자의 합을 구하고, 이것을 7로 나눈 나머지를 활용하여 계산하였다.

import java.util.stream.IntStream;

class Solution {
    public String solution(int a, int b) {
        String answer = "";
        //1월 1일은 금요일이고, 배열은 [0]부터 카운트되기 때문에 목요일부터 시작
        String[] week = new String[] {"THU","FRI","SAT","SUN","MON","TUE","WED"};
        //마지막날이 31인 경우는 else로 계산하여, 그 외의 경우인 29, 30인 날을 각각 배열로 만듦
        int[] case1 = new int[] {2};
        int[] case2 = new int[] {4, 6, 9, 11};
        int day = 0; //day는 for문 바깥에서도 사용되므로 미리 선언

        //for문은 통해 입력하는 달의 전월까지의 모든 일자의 합을 구함
        for (int i = 1; i < a; i++){
            int month = i;
            //anyMatch를 이용하여, 각각 해당하는 달의 날짜를 day에 계속 더함.
            if (IntStream.of(case1).anyMatch(x -> x == month)) {
                day += 29;
            } else if (IntStream.of(case2).anyMatch(x -> x == month)) {
                day += 30;
            } else {
                day += 31;
            }
        }

        //for문을 통해 계산된 직전달까지의 일자 합+입력된 날짜 → 총 날짜의 함
        int days = day+b;
        //총 날짜의 합에서 7로 나눈 나머지로 요일의 위치 구함.
        answer = week[days%7];
        return answer;
    }
}

++다른 답

문제 푸는 방식은 비슷했는데,

총 일자의 합을 구할 때 각 달의 해당 날짜를 미리 배열로 만들어 놓고 for문을 통해 더하는 방법도 있었다.

int[] date = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

훨씬 간단한듯!