[백준 BOJ] 2948번 2009년 (C++/cpp)

2022. 6. 15. 02:22PS (Program Solving)/BOJ (백준)

문제 설명

https://www.acmicpc.net/problem/2948

 

2948번: 2009년

2009년 M월 D일의 요일을 영어로 출력한다. 출력은 다음 중 하나이다. "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday".

www.acmicpc.net

백준 BOJ 2948번 2009년 문제 사진

 

접근 방법 - 날짜에 대한 사칙연산 문제

백준의 2948번 문제는 날짜에 관련한 기본적인 사칙연산 문제이다.

해당 문제는, 입력받은 2009년의 특정 날짜가 무슨 요일인지에 관하여 출력해야 하는 문제이다.

여기서, 2009년 1월 1일이 목요일이라는 점이 예제 입출력에 제시되어있는데 이 점을 유의하길 바란다.

필자의 경우엔 배열을 응용하였는데, 어떻게 응용하였는지는 아래의 설명을 참고하길 바란다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

 

코드의 실행 순서

1) 크기가 7인 문자열 배열(week)을 아래처럼 초기화하여 선언한다.

(2009년의 첫날이 목요일이기 때문에, 목요일을 시작으로 하여 각 배열값들을 초기화하였다.)

 

2) 날짜(d, m)를 입력받는다.

 

3) 2)의 날짜까지 도달하는 데의 총 일수를 저장하는 day 변수를 d로 초기화하여 선언한다.

(m의 값에 기반한 연산은 이후에 따로 필요하지만, d는 단순 일수이기 때문에 변수를 해당 값으로 초기화하도록 한다.)

 

4) m의 값을 1씩 감소시키면서 해당 월의 일수를 day에 더하도록 한다.

2월: 28일
4월, 6월, 9월, 11월: 30일
1월, 3월, 5월, 7월, 8월, 10월, 12월: 31일

 

5) 연산이 모두 끝난 day를 7로 나머지 연산한 값을 배열 번호로 갖는 week의 배열값을 출력한다.

(7일 주기로 요일이 순환한다. 따라서, 7로 나머지 연산한 값에 대한 요일이 정답으로 출력되도록 해야 한다.)

 

6) 출력이 모두 수행되었다면, 실행 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#include <string>
#define endl '\n'
using namespace std;

//백준 2948번 코드
string week[7] = { "Wednesday", "Thursday", "Friday", "Saturday", "Sunday","Monday", "Tuesday" };
int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);	cout.tie(NULL);
	
	int d, m;
	cin >> d >> m;

	int day = d;
	for (int i = m - 1; i > 0; i--) {
		if (i == 2) { day += 28; }
		else if (i == 4 || i == 6 || i == 9 || i == 11) { day += 30; }
		else { day += 31; }
	}
	cout << week[day % 7] << endl;
}

 

제출 결과

백준 BOJ 2948번 2009년 문제 C++ 제출 결과

(2022.04.06 백준 2948번 문제 제출 결과)

맞춘 뒤에도 왜 맞았는지 궁금해서 몇 번이나 시도한 흔적이 보인다.

반응형