백준 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;
}

 

 

크리스마스는 화요일
현충일은 수요일

 

 

 

 

반응형