오늘은 백준 알고리즘 1924번 문제인 2007년을 풀어보도록 하겠습니다.
문제
오늘은 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중 하나를 출력한다.
소스코드로 풀이를 보시면 될 것 같습니다. 여기서 어떻게 저런 로직이 나올까? 라는 생각을 하실 수가 있어서 count, count2라는 것을 나와서 출력을 하게끔 만들었습니다.
소스코드 보시겠습니다.
#include <iostream>
#include <string>
using namespace std;
int main()
{
int month[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; // 달
string day[7] = { "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT" }; // 문자열의 일수
int count1 = 0; // 총 계산값
int x, y;
cin >> x >> y; // ex) 12월 25일로 가정합니다.
if (x >12 || x < 1 || y > 31 || y < 1)
return 0;
for(int i=0; i<x; i++) // x: 12로 가정.
{
if((i + 1) == x) // 첫번째 포문은 (0 + 1 ) == 12 성립하지 않습니다. 그렇기 때문에 else로 넘어 갑니다. ----- 1
{
count1 += y; //아까 총 count2값이 :334입니다 +y해주시면 334+25 = 359입니다. -- 4
cout<<"count : "<<count1<<endl;
}
else
{
count1 += month[i]; //moth[0] = 31 , month [1] = 28 :: 12까지니 31까지 더하겠죠 ? -- 2
cout<<"count2 : "<<count1<<endl; // 총 더한 값 출력 값. 334가 됩니다. 이제 if문으로 갑니다. -- 3
}
}
cout<<day[count1 % 7 ] <<endl; // day[359 % 7 ] = 2이죠 : day[2] = TUE --- 5
return 0;
}
다음으로는 왜 count가 그렇게 나오는 지에 대한 출력입니다. 생각해보시면 왜 저런 답이 나왔는지 아실거에요!
여기서 count2 : else문이고 count는 if문입니다.
이상 포스터를 마치겠습니다.
'알고리즘' 카테고리의 다른 글
백준 알고리즘 - 2445번 별 찍기 -8 C/C++문제 풀이 (0) | 2020.05.28 |
---|---|
백준 알고리즘 2441번 별 찍기 -2 C/C++ 문제풀이 (0) | 2020.05.19 |
백준 알고리즘 2742번 - 기찍 N C/C++문제풀이 (0) | 2020.05.17 |
백준 알고리즘 11721번 - 열 개씩 끊어 출력하기 C++ 문제 풀이 (0) | 2020.05.16 |
백준 알고리즘 11720번 숫자의 합 C++ 문제풀이 (0) | 2020.05.15 |