[백준1924] 2007년
- 프로그래밍/알고리즘
- 2019. 3. 24.
[백준1924] 2007년
안녕하세요.
이번에는 백준 2007년 [1924번]문제를 풀어보려고 합니다.
이 문제를 처음에는 노가다로 풀고 두번째는 배열을 이용해서 풀었습니다.
이 문제의 코드는 글에 스크린샷 형태로 올려져 있으며 아래 git허브 링크를 통해서도 확인하실 수 있습니다.
그럼 지금부터 문제를 풀어보도록 하겠습니다.
그 전에 썸네일 사진좀.. ㅎㅎ
백준 1924번 문제.
오늘은 2007년 1월 1일 월요일.
2007년 x월 y일은 무슨 요일일까?
조건
1. 2007년 1월 1일은 월요일.
2. 1월 , 3월, 5월, 7월, 8월, 10월, 12월은 1~31일까지.
-4월, 6월, 9월, 11월은 1~30일까지.
-2월은 28일까지 있다.
3. 2007년 x월 y일이 무슨 요일인지에 따라 요일을 출력해야한다.
-(SUN, MON, TUE, WED, THU, FRI, SAT)
예시 입력, 출력
*x요일과 y요일이 주어집니다.
1 1 --> MON
3 14 -> WED
9 2 -->SUN
12 25 --> TUE
코드
코드는 아래와 같습니다.
아래의 코드는 github에서 다운가능합니다.(아래 링크)
for문->new_baekjoon1924,baekjoon1924입니다.
1. 노가다로 만든 코드(baekjoon1924.c)
아 조금 기네요.
2. 위의 코드가 너무 길어서 다시 만들어본 코드(new_baekjoon1924.c)
ㅎㅎ 역시 코드 짧은게 좋네요.
문제풀이 1(노가다)
1. x월과 y일을 입력받습니다.
2. switch문을 실행합니다.
3. 예를들어 x=3(월)을 입력받으면 switch문의 case 3:로 이동합니다.<위의 코드에서는 i>
4. case 3:에서 1월과 2월의 더한 날짜를 n에 더합니다. <1월과 2월을 더하면 59일>
-59를 n에 더하고 for문을 y번만큼 반복하면서 n의 숫자를 올립니다.<y=24라면 59+24가 되는 것>
-j번을 다 돌리면 break문으로 스위치문을 빠져나옵니다.
5. 이제 아래 스위치문으로 들어가서 sum%7의 연산을 해서 나온 나머지로 이동합니다.<아래 설명 참고.>
- 해당되는 요일을 출력하고 프로그램을 마칩니다.
- sum=7일때 sum%7을 하면 0이나옵니다.<값이 아닌 나머지를 출력해주는 연산입니다.>
- sum=5일때 sum%7을 하면 5가 나옵니다.
- sum=7일때 sum/7을하면 1이나옵니다.
- sum=5일때 sum/7을 하면 0이 나옵니다.
대충 차이 아시겠죠?
문제풀이 2(배열)
1. month와 day를 배열에 저장합니다.
2. x월과 y일을 입력받습니다.
3. 1월일때는 그냥 for문을 이용해서 sum에 1씩 더합니다.<j번(y일)>
4. 2월 이상이라면 전월(last month)의 날짜수를 for문을 돌면서 더해줍니다.
-ex)3월일때 첫번째 for문(1월의 31일+2월의 28일)+두번째 for문을 j번더함(sum++)
5. for문을 다 돌았으면 나와서 sum%7로 나머지를 구해서 요일을 출력합니다.
-나머지 0일때 == 일요일
-나머지 1일때 == 월요일
-나머지 2일때 == 화요일
-나머지 3일때 == 수요일
-나머지 4일때 == 목요일
-나머지 5일때 == 금요일
-나머지 6일때 == 토요일
*이렇게 배열에 저장되어 있습니다.
후기
열심히 설명한다고 쓰긴 썻는데 설명이 잘 안되네요.
....첨부터 그냥 배열쓸걸 배열이 생각이 안나서..노가다를...