백준 algorithm
백준 1924 - 2007년
cosmohoo
2020. 7. 10. 14:12
반응형
=> 구현 문제입니다.
=> 해당 문제의 경우 1년의 case만 생각하면 되기 때문에 brute Force(브루트 포스)로 문제를 풀어도 전혀 무방합니다.
-
week [7] : 일주일을 저장하는 배열
-
index : 위의 배열을 따라다니며 요일을 확인하는 변수
-
X와 Y의 값을 입력받습니다.
-
switch case문을 이용해 한 달이 31일인 경우, 30일인 경우 28일인 경우를 나눕니다.
-
제가 구하는 달의 일까지만 index를 지속적으로 추가해줍니다.
-
index는 7을 벗어나지 않으므로, %7을 해주어 숫자가 커지는 것을 방지해줍니다.
-
weel [index]의 값을 출력합니다.
=> 위와 같은 logic을 따라 입력받은 X월 Y일의 요일을 알아낼 수 있습니다.
=> 다른 사람의 경우 X 이전의 달들을 index에 더한 후, Y의 값만큼 더한 후, %7을 통해 문제의 답을 알아내는 방법을 사용했습니다.
=> 해당하는 방법이 훨씬 간단한 코드를 구현할 수 있으며, 훨씬 빠른 속도를 자랑합니다.
=> 조금 생각하는 습관을 들여야겠다는 생각을 하였습니다.
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
string week[7]={"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int X, Y;
cin >> X >> Y;
int index =0; //요일 가리킬 index, 1월 1일은 월요일
for(int i=1; i<=X; i++)
{
switch(i)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
{
if(i!= X)
{
for(int j=0; j<31; j++)
{
if(index+1 >6)
{
index = (index+1)%7;
}
else{
index++;
}
}
}
else{
for(int j=0; j<Y; j++)
{
if(index+1 >6)
{
index = (index+1)%7;
}
else{
index++;
}
}
}
}
break;
case 2:
{
if(i!= X)
{
for(int j=0; j<28; j++)
{
if(index+1 >6)
{
index = (index+1)%7;
}
else{
index++;
}
}
}
else{
for(int j=0; j<Y; j++)
{
if(index+1 >6)
{
index = (index+1)%7;
}
else{
index++;
}
}
}
}
break;
case 4 :
case 6 :
case 9 :
case 11:
case 12:
{
if(i!= X)
{
for(int j=0; j<30; j++)
{
if(index+1 >6)
{
index = (index+1)%7;
}
else{
index++;
}
}
}
else{
for(int j=0; j<Y; j++)
{
if(index+1 >6)
{
index = (index+1)%7;
}
else{
index++;
}
}
}
break;
}
}
}
cout<<week[index]<<'\n';
return 0;
}
반응형