끄적끄적 코딩일지

[Programmers]2016년(난이도:★★★) 본문

알고리즘

[Programmers]2016년(난이도:★★★)

BaekGyuHyeon 2022. 5. 16. 17:58

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

 

코딩테스트 연습 - 2016년

2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까

programmers.co.kr

class Solution {
    public String solution(int month, int day) {
        int sumDays = 0;
        // 1월 1일부터 입력Month까지 day수 계산
        // ex) 5월까지라면 31+29+30+31+30
		for(int i = 0 ; i < month; i++)
			sumDays += getDayOfMonth(i+1);
        // 날짜 빼기
		sumDays -= (getDayOfMonth(month)-day);
        // 7로 나눈값의 요일 index 반환(금:0,토:1,....)
        int idx = sumDays%7-1 < 0? 6:sumDays%7-1;
        // 요일 index의 enum 이름 반환
        return DAY.values()[idx].name();
    }
    // 입력받은 month의 day수 반환
	public static int getDayOfMonth(int month) {
		return Month.values()[month-1].day;
	}
    // enum 사용하기
	enum DAY{
		FRI,SAT,SUN,MON,TUE,WED,THU
	}
	enum Month{
		JEN(1,31),
		FEB(2,29),
		MAR(3,31),
		APR(4,30),
		MAY(5,31),
		JUN(6,30),
		JUL(7,31),
		AUG(8,31),
		SEP(9,30),
		OCT(10,31),
		NOV(11,30),
		DEC(12,31);
		private int month;
		private int day;
		Month(int month,int day){
			this.month = month;
			this.day = day;
		}
		public int getMonth() {
			return month;
		}
		public void setMonth(int month) {
			this.month = month;
		}
		public int getDay() {
			return day;
		}
		public void setDay(int day) {
			this.day = day;
		}
	}
}