코딩 테스트

프로그래머스 2016년 Java (+7)

hyecozy 2022. 8. 7. 19:26

https://school.programmers.co.kr/learn/courses/30/lessons/12901

 

프로그래머스

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

programmers.co.kr

 

class Solution {
    public String solution(int a, int b) {
        String[] dayArr = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
        //1월 0일이 있다 가정하고 기준 요일을 [4]요일로 설정
        int standardDay = 4;
        //month를 day로 변환
        int mToD = 0;
        
        //1월이면 그냥 내보냄
        if(a == 1)
            return dayArr[(standardDay + b) % 7];
        
        //mToD 설정하기
        for(int i = 1; i < a; i++){
            //8월부턴 짝수달이 31일
            if(i > 7){
                if(i % 2 == 1)
                    mToD += 30;
                else
                    mToD += 31;
            }
            else{
                if(i % 2 == 1)
                    mToD += 31;
                else
                    mToD += 30;
            }
        }
        
        //2월은 30일이 아닌 29일이므로 
        if(a > 2){
            mToD--;
        }
        //1.1과 차이를 담을 변수=기존[5] + 달을 일로 바꿈 + 순수 일수
        return dayArr[(standardDay + mToD + b) % 7];
    }
}

➡️요일은 dayArr라는 String 배열을 만들어 설정

➡️금요일에서 흘러간 시간만큼 더한 후, 7로 나눈 나머지를 구하면 요일을 뽑아낼 수 있다

➡️결국 관건은 흘러간 시간을 어떻게 구하느냐가 되는데,

➡️일수는 b 그대로 더하면 되니까 재끼고(?)

➡️월을 어떻게 일로 변환하느냐가 중요하다고 생각했다.

1월은 따로 mToD를 구할 필요 없으니 바로 return 시키기

2~12월중 7월을 기준으로 7월까지는 홀수달이 31일, 8월부터는 홀수달이 30일임을 감안해 코딩.

➡️흘러간 시간을 구할 때 2월이 통째로 포함된 달이라면 (=3월부터)

-1을 해준다. 2월이 30일로 계산되었을 테니까

 

😂dayArr 배열의 순서를 일월화수목금토가 아닌 1월 1일 금토일월화수목으로 설정을 했더라면 standardDay라는 변수를 안 만들어도 됐을 텐데....라고 풀고 나서 생각이 들었다. 그래도 금요일은.. 금요일 위치에 있는 게 안정적인데 헤헤...

 

 

+

그나저나 문제 풀고 나서 포인트 받는 거 저거! 의미 있는 거 맞는 거지...? 최근엔 계속 1점 2점만 받다가 오랜만에 7점 받아서 기록했다!!!