[ Programmers ] 2016년 (Java)

tpdlqj0514·2021년 5월 5일
0

Programmers

목록 보기
11/20
post-thumbnail

1. Problem 📃

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



2. Constraint 🔗


3. Solution 🔑

윤년 구하는 방법

  1. 연도가 4로 나누어 떨어지면 윤년
  2. 연도가 4, 100으로 나누어 떨어지면 평년
  3. 연도가 4, 100, 400으로 나누어 떨어지면 윤년

(2016(윤년))월별 일 수

|월|1월|2월|3월|4월|5월|6월|7월|8월|9월|10월|11월|12월|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|일|31|29|31|30|31|30|31|31|30|31|30|31|

  1. 입력 받은 일 수가 2016년 1월 1일(금요일)부터 며칠이 지나갔는지 확인
  1. 배열은 지나간 일 수를 표현해야하므로 위에 표와 다르게 한달 씩 미룬다
    (2월1일은 1월1일로 부터 30일이 지났기 때문에)
  2. 지나간 일 수를 7로 나누어 나머지를 확인한다.
  3. 7로 나눈 몫 만큼 '주'가 지나간 것이고 나머지는 1월 1일(금요일)부터 며칠이 흘렀는지 알 수 있다.
  4. 지나간 일 수(나머지)는 1월 1일(0일) 부터 시작 했으므로 지나간 일 수에 -1을 뺀다
  5. 나는 코드에서 금요일을 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개의 댓글