관리 메뉴

cococo-coding

[C++ 풀이] 1924번 & 2948번 본문

[BOJ] 코드 모음/C++_learning 문제집

[C++ 풀이] 1924번 & 2948번

_dani 2024. 1. 23. 23:40

1924번과 2948번 모두 월과 일을 입력받아 무슨 요일인지 출력하는 문제이다.

해결 알고리즘이 동일하기 때문에 하나의 글로 묶어 써보려고 한다.

 

문제 분석

x월 y일을 입력받아 해당일이 어떤 요일인지 출력한다.

월-> 일수로 변환하고, 입력받은 일(y)까지 더해서 요일을 구하려고 한다.

 

알고리즘 설계

각 월의 일수를 넣은 int형 배열을 선언해주고, 

요일을 넣은 string형 배열도 만들어준다.

최종적으로 구할 totalday변수는 0으로 초기화해준다.

 

월의 일수를 담은 배열에서 입력받은 월까지의 일수를 totalday에 더해준다.

그리고 입력받은 y일을 totalday에 더한다.

 

totalday를 7로 나누어 day배열에 맞춘 요일을 출력한다. 

 

코드

1) 2948번

#include <iostream>
using namespace std;

int main() {
    int mday[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
    string day[7] = { "Wednesday", "Thursday", "Friday", "Saturday", "Sunday","Monday", "Tuesday" };
    int totalday = 0;

    //m월 d일
    int m, d;
    cin >> d>>m;

    //최종데이에 월을 변환해서 더해줌
    for (int i = 0; i < (m - 1); i++) {
        totalday += mday[i];
    }
    //최종데이에 y일을 더함
    totalday += d;

    cout << day[totalday % 7] << '\n';

    return 0;
}

 

2) 1924번

#include <iostream>
using namespace std;

int main() {
    int mday[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
    string day[7] = { "SUN", "MON", "TUE", "WED", "THU","FRI","SAT" };
    int totalday = 0;

    //x월 y일
    int x, y;
    cin >> x >> y;

    //최종데이에 월을 변환해서 더해줌
    for (int i = 0; i < (x - 1); i++) {
        totalday += mday[i];
    }
    //최종데이에 y일을 더함
    totalday += y;

    cout <<day[totalday % 7] << '\n';
 
    return 0;
}

 

느낀 점

어렵게 생각하니 더 어려웠던 문제들..

어차피 1월1일부터 12월 마지막일까지 요일은 반복되므로, 해당 월만 반복해서 더해주면 되는 문제였다.

배열을 이용해 요일을 구하는 방법도