<알고리즘 문제풀이&연습>/[C++] 백준, 프로그래머스 등등

[백준 1924] 2007년

BlockDMask 2017. 12. 4. 18:53
반응형
  • 안녕하세요. BlockDMask 입니다.

  • 지난주에는 정말 기쁜 일이 있었고, 그 일 이후로 정신이 없어서 목금토일을 쉬었네요.

  • 다시 오늘부터 꾸준하게 !! 오늘의 문제 풀겠습니다.

0. 제목

  • 백준 1924 2007년

  • BOJ 1924 2007년

  • C/C++ 달력문제

1. 문제 설명

  • 오늘은 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 중 하나를 출력한다.

2. 풀이 과정

  • 1월 1일 부터 x월 y일 까지의 day의 총 수를 구한 후 일주일로 나누어 남은 나머지를 이용하여 요일을 구하면 됩니다.

  • x월 까지의 day 수를 구하기 위해 각 월마다 일 수를 배열에 저장을 합니다.

  • 1월 1일이 월요일 이므로 따로 계산을 하지 않게 하기위해 string 배열 day의 idx=1 일때 월요일로 시작하도록 배열을 선언합니다.
     (1월1 일이 1번째 이므로 7로 나누었을때 나머지 1 => 월요일)


3. 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//https://www.acmicpc.net/problem/1924
//BOJ_1924_2007year
 
#include<iostream>
using namespace std;
 
class calendar{
private:
    //1월부터 일자를 기록하고 있는 변수
    int month[12= {312831303130313130313031};
    string day[7= {"SUN""MON""TUE""WED""THU""FRI""SAT"};
    int key;    //나머지 값을 저장할 변수
    int x;  //입력 받을 month
    int y;  //입력 받을 day
 
public:
    void setDate(){
        cin >> x;
        cin >> y;
        key = 0;
    }
    void solution(){
        for(int i=0; i<x-1; i++){ //해당 달 까지 더한다 idx=0부터 이므로 m-1까지
            y += month[i];
        }
        key = y%7;  //다 더한 값을 일주일(7일)로 나누어준 나머지를 key에 저장
    }
    void printDay() const{
        cout << day[key];
    }
};
 
 
int main(void){
    calendar c;
    c.setDate();
    c.solution();
    c.printDay();
    return 0;
}
cs


4. 인증



- 문제 출처 : https://www.acmicpc.net/problem/1924

감사합니다.

반응형