본문 바로가기

코딩테스트 연습/SWEA

[SWEA] 1948. 날짜 계산기 D2 (C++)

https://swexpertacademy.com/main/solvingProblem/solvingProblem.do

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

 

1. 해당 month에 대한 날짜수를 day벡터에 pair로 초기화해서 월과 매칭되는 날짜를 구할 수 있도록 한다.

2. month1과 month2의 사이에 있는 월들을 month벡터에다 집어넣고,

3. day벡터의 첫번째 요소와 같은 month들의 날짜 수들의 합을 sum에다가 저장한다.

4. 그 후 ( day2 + sum - day1 ) + 1; 를 해주면 날짜 수를 계산 할 수 있다.

 

핵심 코드는 

result = ( day2 + sum - day1 ) + 1;

 


#include <iostream>
#include <vector>
using namespace std;

int main() {

    int T;
    cin >> T;
    for(int t=1; t<=T; t++) {

        vector<pair<int, int>> day = {{1,31},{2,28},{3,31},{4,30},{5,31},{6,30},{7,31},{8,31},{9,30},{10,31},{11,30},{12,31}};
        int month1, day1, month2, day2;
        cin >> month1 >> day1 >> month2 >> day2;
        
        int month1_day;
        vector<int> month;
        for(int i = month1; i < month2; i++) month.push_back(i);
        
        for(int i=0;i<12;i++)if(month1 == day[i].first){ month1_day = day[i].second; }
        
        int sum = 0; //해당 month1 ~ month2 사이 month의 날짜수 합
        for(int i=0;i<month.size();i++){
            for(int j=0;j<12;j++){
                if ( month[i] == day[j].first) { sum += day[j].second; break; }
            }
        }
        
        int result = 0;
        result = ( day2 + sum - day1 ) + 1;
        
        cout << "#" <<  t  << " "  << result << "\n";
    }
    
    return 0;
}