코딩 공부

[백준] 1924번 - 2007년 (Java)

ZZJJing 2020. 7. 29. 18:48

먼 훗날..

"'이렇게 멍청했나..?'라고 

이야기할 수 있는 날이 오겠지..? "라며 시작하는 

 

알고리즘 공부 일지.. 

 

 

머리가 똥으로만 가득 찬 나는 아주아주 기초 빼고는 

막히기 시작했다. 

 

 

 

https://www.acmicpc.net/problem/1924

 

1924번: 2007년

첫째 줄에 빈 칸을 사이에 두고 x(1≤x≤12)와 y(1≤y≤31)이 주어진다. 참고로 2007년에는 1, 3, 5, 7, 8, 10, 12월은 31일까지, 4, 6, 9, 11월은 30일까지, 2월은 28일까지 있다.

www.acmicpc.net

문제

오늘은 2007년 1월 1일 월요일이다. 그렇다면 2007년 x월 y 인 무슨 요일일까? 이를 알아내는 프로그램을 작성하시오.

입력

첫째 줄에 빈칸을 사이에 두고 x(1≤x≤12)와 y(1≤y≤31)이 주어진다. 참고로 2007년에는 1, 3, 5, 7, 8, 10, 12월은 31일까지, 4, 6, 9, 11월은 30일까지, 2월은 28일까지 있다.

출력

첫째 줄에 x월 y일이 무슨 요일인지에 따라 SUN, MON, TUE, WED, THU, FRI, SAT 중 하나를 출력한다.

 


- 1월 1일은 MON이다.  (인덱스 1번째 자리에 MON 위치) 

- 2월 1일은 32일 차다. / 3월 1일은  (1월의 31 + 2월의 28 = 59) 다음날이니깐 60일 차다.

 

 

 

 

내가 가장 헷갈렸던 것은 

allDays += day;  인 부분이었다.  (ᵒ̌▱ᵒ̌)!!!! 

 

for 문으로는 month만 돌리니깐 

3월 1일의 경우 2월에서 멈춘다. 날은 59일이 되는데, month보다 작은 수가 까지만 for문을 돈다. (2까지)

입력한 수는 3월 1일이니깐, 59 일에서 일자수 인 1을 더해야 => 60일 차를 맞춘다. 

 

그 날을 7로 나누고 나머지 일자에 맞는 배열의 값을 뽑아오면 된다.

 

 

 


 

본받고 싶은 다른 친구의 코드. 

 

import java.util.Scanner;

public class Main {
	
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);

		int x,y = 0; 
        int[] month = {31,28,31,30,31,30,31,31,30,31,30,31};
        String[] week ={"SUN","MON","TUE","WED","THU","FRI","SAT"};
        
        x = sc.nextInt();
        y = sc.nextInt();
        
        for(int i=0; i<x-1; i++){
        	y += month[i];  
        }

		y = y%7;
        System.out.println(week[y]);
		
		sc.close();
	}
}

 

- 입력받은 y 값에 바로 일수를 때려 넣어버린다. 

- 날자 배열을 하나 만들어 놓으니깐 코드가 간결해졌다!

- for문의 x -1 은 i 가 0부터 시작하기 때문