반응형
안녕하세요. 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] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; 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
감사합니다.
반응형
'<알고리즘 문제풀이&연습> > [C++] 백준, 프로그래머스 등등' 카테고리의 다른 글
[Level 1] 행렬의 덧셈 (0) | 2017.12.13 |
---|---|
[백준 1463] 1로 만들기 (DP) (2) | 2017.12.12 |
[Level 1] 약수의 합 (C언어 약수구하기) (0) | 2017.12.12 |
[백준 2748] 피보나치 수2 (0) | 2017.12.05 |
[백준 5648] 역원소 정렬 (0) | 2017.11.29 |
[백준 1212] 8진수 2진수 (1) | 2017.11.28 |
[백준 2447] 별찍기10 (1) | 2017.11.22 |
[백준 2446] 별찍기9 (0) | 2017.11.21 |