[백준1924] 2007년

[백준1924] 2007년

안녕하세요.

이번에는 백준 2007년 [1924번]문제를 풀어보려고 합니다.

이 문제를 처음에는 노가다로 풀고 두번째는 배열을 이용해서 풀었습니다.

이 문제의 코드는 글에 스크린샷 형태로 올려져 있으며 아래 git허브 링크를 통해서도 확인하실 수 있습니다.

그럼 지금부터 문제를 풀어보도록 하겠습니다.

그 전에 썸네일 사진좀.. ㅎㅎ

백준 1924번 썸네일

백준 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)

아 조금 기네요.

1924노가다코드

2. 위의 코드가 너무 길어서 다시 만들어본 코드(new_baekjoon1924.c)

ㅎㅎ 역시 코드 짧은게 좋네요.

1924 배열 코드

문제풀이 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일때 == 토요일

*이렇게 배열에 저장되어 있습니다.

후기

열심히 설명한다고 쓰긴 썻는데 설명이 잘 안되네요.

....첨부터 그냥 배열쓸걸 배열이 생각이 안나서..노가다를...

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

Designed by JB FACTORY