문제: 오늘은 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 = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
이렇게 달과 요일의 배열을 미리 선언해두고,
3월 21일을 알고 싶으면 d[1] + d[2] + 21 -1 이렇게!
달의 배열에서 첫 숫자가 0인 이유는 배열이 0부터 시작하기 때문에 0월은 없으므로!
달을 다 더해준다. 포문이 끝나고 나서 day를 더해준다. 그 수를 7로 나눈 나머지를 가져와서
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 = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; 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 |