본문 바로가기
알고리즘/프로그래머스

[프로그래머스 / 2016년 / JAVA]

by KDW999 2023. 3. 23.

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

 

프로그래머스

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

programmers.co.kr

 

문제 접근


년도가 2016년에 한정되어있다.
윤년이라 2월은 29일까지
1 <= a <= 12

1 <= b <= 30, 31 (2월은 29일)
마지막 날이 30, 31인 달 부터 구분
1, 3, 5, 7, 8, 10, 12 → 31
2, 4, 6, 9, 11 → 29, 30
요일마다 숫자 부여해서 요일 계산
SUN = 0, MON = 1, TUE = 2, WED = 3, THU = 4, FRI = 5, SAT = 6
시작 기준점 1월 1일 금요일

class Solution {
	public String solution(int a, int b) {
		String answer = "";
		int month = 1;
		int day = 1;
		int dayOfWeek = 5;
		int maxDay = 0;

		while (true) {
			if (month == a && day == b) break;
			day++;
        	dayOfWeek++;
        	
			if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) maxDay = 31;
			else if (month == 4 || month == 6 || month == 9 || month == 11) maxDay = 30;
			else maxDay = 29;

			if (day > maxDay) {
				day = 1;
				month++;
			}
			if (dayOfWeek > 6) dayOfWeek = 0;
			
		}
		return dayOfWeek(dayOfWeek);
	}

	public String dayOfWeek(int dayOfWeek) {
		if (dayOfWeek == 0) return "SUN";
		else if (dayOfWeek == 1) return "MON";
		else if (dayOfWeek == 2) return "TUE";
		else if (dayOfWeek == 3) return "WED";
		else if (dayOfWeek == 4) return "THU";
		else if (dayOfWeek == 5) return "FRI";
		else if (dayOfWeek == 6) return "SAT";
		else return "이건 나오면 안돼";
	}
}

 

다른 사람 풀이

매 월의 최대 일수를 배열로 만들어 놓으니 더 깔끔해보인다.

해당 풀이는 전 달의 최대 일수에서 구하고자하는 요일의 일수만큼 더해서 그 수의 나머지로 요일을 구한다.

class TryHelloWorld
{
    public String getDayName(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 allDate = 0;
        for (int i = 0; i < a - 1; i++) {
            allDate += date[i];
        }
        allDate += (b - 1);
        answer = day[allDate % 7];

        return answer;
    }
    public static void main(String[] args)
    {
        TryHelloWorld test = new TryHelloWorld();
        int a=5, b=24;
        System.out.println(test.getDayName(a,b));
    }
}

댓글