본문 바로가기

건승하고있어요/알고리즘

[for] 2007년 달력문제

반응형

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

(출처: https://www.acmicpc.net/problem/1924)


ㅠ_ㅠ

힌트를 주신 스승님께 무한한 감사를 드립니다. 최고멋쪙


어... 나는 일일이 하나하나 요일을 계산하고 바보같이 실마리를 하나도 풀지 못했는데, 일단위로 더하기 하는 개념으로 가면 좋다는 스승님의 힌트에 코드를 짤 수 있었습니다! 넘나 감격스러운 거


사실 이 문제를 어떻게 풀어야 할지 아예 감을 잡지 못했었다. 그러니 나도 예를 다시 들어보자면,

3월 21일이 무슨 요일인지 알고 싶다고 해보자. 

그러면 1월=>31일, 2월=>28일, 그리고 21일 이렇게 지나야 한다. 

31 + 28 + 21인데, 당일이니까 -1을 빼준다. 

따라서 31 + 28 + 21 -1 이걸 7로 나눈 나머지를 구한다. 그 나머지에 해당한 요일의 배열이 바로 3월 21일의 요일인 것.


  int [] d = {0312831303130313130313031};

 String [] day = {"MON""TUE""WED""THU""FRI""SAT""SUN"};


이렇게 달과 요일의 배열을 미리 선언해두고, 

3월 21일을 알고 싶으면 d[1] + d[2] + 21 -1 이렇게! 

달의 배열에서 첫 숫자가 0인 이유는 배열이 0부터 시작하기 때문에 0월은 없으므로!


 int M = 0;
        for(int i=0 ; i<Month ; i++) {
            M = M + d[i];
        }
        
        M = (M+Day-1)%7;


달을 다 더해준다. 포문이 끝나고 나서 day를 더해준다. 그 수를 7로 나눈 나머지를 가져와서


        System.out.println(day[M]);

day배열의 요일을 찾아온다. 


2007년 3월 21일은 수요일이었댄다.

근데 혹시나 하는 마음에 2007년 달력을 뒤져봤다.

실제로 1월 1일이 월요일이었고

수요일이다

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

싱기방기!



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import java.util.Scanner;
 
public class Calendar {
    
    public static void main(String[] args) {
        
        Scanner scan = new Scanner(System.in);
        int Month = scan.nextInt();
        int Day = scan.nextInt();
 
        int [] d = {0312831303130313130313031};
        String [] day = {"MON""TUE""WED""THU""FRI""SAT""SUN"};
        
        int M = 0;
        for(int i=0 ; i<Month ; i++) {
            M = M + d[i];
        }
        
        M = (M+Day-1)%7;
        
        System.out.println(day[M]);
        
        
        
        scan.close();
    }
 
}
 
cs


반응형

'건승하고있어요 > 알고리즘' 카테고리의 다른 글

[if] 더하기 사이클  (3) 2018.02.12
[if] 평균은 넘겠지 / printf() 메소드 정리  (2) 2018.02.11
[소수] 소수찾기  (5) 2018.02.07
[1차원배열] 숫자의 개수  (2) 2018.02.07
[if] X보다 작은 수  (2) 2018.02.07