[ Programmers ] 2016년 (Java)

ma.caron_g·2021년 5월 5일
0

Lv.1 - Programmers (완성)

목록 보기
11/74
post-thumbnail

1. Problem 📃

[ 2016년 ]
https://programmers.co.kr/learn/courses/30/lessons/12901



2. Constraint 🔗


3. Solution 🔑

윤년 구하는 방법
1. 연도가 4로 나누어 떨어지면 윤년
2. 연도가 4, 100으로 나누어 떨어지면 평년
2. 연도가 4, 100, 400으로 나누어 떨어지면 윤년

(2016(윤년))월별 일 수

1월2월3월4월5월6월7월8월9월10월11월12월
312931303130313130313031
  1. 입력 받은 일 수가 2016년 1월 1일(금요일)부터 며칠이 지나갔는지 확인
  2. 배열은 지나간 일 수를 표현해야하므로 위에 표와 다르게 한달 씩 미룬다
    (2월1일은 1월1일로 부터 30일이 지났기 때문에)
  3. 지나간 일 수를 7로 나누어 나머지를 확인한다.
  4. 7로 나눈 몫 만큼 '주'가 지나간 것이고 나머지는 1월 1일(금요일)부터 며칠이 흘렀는지 알 수 있다.
  5. 지나간 일 수(나머지)는 1월 1일(0일) 부터 시작 했으므로 지나간 일 수에 -1을 뺀다
  6. 나는 코드에서 금요일을 index=0 에 두었고, 지나간 일 수(나머지) 0에서 -1이 되면 -1이 나오는데 이를 조건문으로 그 전 날인 목요일로 바꿔준다.

4. Code 💻

public class Solution {
	public String solution(int a, int b) {
		int day = 0;
		if(a>12 || b>31) {
			System.exit(0);
		}
		String[] week = { "FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"};
		int[] month = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30};
		for(int i=0; i<a; i++) {
			day += month[i]; 
		}
		day = ((day + b) % 7) - 1;
		if(day== -1) {
			day = 6;
		}
        String answer = week[day];
        return answer;
	}
}

5. Growth 🍄

이 문제는 다른 사람의 풀이를 참고하여 힌트를 얻어 풀었던거 같다.
배열을 통해 일 수의 흐름을 표현할 수 있었다는 점에서 아직 코드를 잘 못짜는 나에게 신기하게 다가왔고 배열을 이런 식으로 사용할 수 있음을 깨닳았다.

profile
다른 사람이 만든 것을 소비하는 활동보다, 내가 생산적인 활동을 하는 시간이 더 많도록 생활화 하자.

0개의 댓글