WEEKLY CALENDAR 문제 꼭 좀 도와주세요..ㅜㅜ

  • yong9960
    yong9960

    계속 Run time 에러가 나는데 계속 코드를 수정했는데도 이유를 모르겠습니다.
    월이 넘어가는 1월 31일 Sunday와 월이 뒤로 넘어가는 1월 1일 Saturday 모두
    예외처리 했는데도 통과가 안됩니다.

    풀었던 방법은 요일을 0~6으로 표시하고 입력받은 date를 빼주면서
    음수일 때는 월이 앞으로 넘어가는 것으로 if condition을 걸어주면서
    circular queue형식으로 31일까지 들어있는 배열,
    30일까지 들어있는 배열, 28일까지 들어있는 배열을 사용했습니다.
    고수님들 꼭좀 부탁드립니다 ㅠㅠ.

    #include<iostream>
    #include<vector>
    #include<algorithm>
    #include<map>
    
    using namespace std;
    
    const int MAX1 = 31;
    const int MAX2 = 30;
    const int MAX3 = 28;
    //1,3,5,7,8,10,12월 -> 31
    //4,6,9,11 ->30
    //2월 -> 28일
    
    int arr31[MAX1] = {0,};
    int arr30[MAX2] = {0,};
    int arr28[MAX3] = {0,};
    int result[100][7] = {0,};
    map<string,int> mapping_day;
    
    int MinusModular(int day, int date, int month);
    void Calendar(int day, int date, int flag, int idx, int month);
    int main(void){
        int test_case;
        cin>>test_case;
    
        mapping_day["Sunday"] = 0;
        mapping_day["Monday"] = 1;
        mapping_day["Tuesday"] = 2;
        mapping_day["Wednesday"] = 3;
        mapping_day["Thursday"] = 4;
        mapping_day["Friday"] = 5;
        mapping_day["Saturday"] = 6;
    
    
        for(int i = 0; i < MAX1; i++){
            arr31[i] = i+1;
        }
        for(int i = 0; i < MAX2; i++){
            arr30[i] = i+1;
        }
        for(int i = 0; i < MAX3; i++){
            arr28[i] = i+1;
        }
        int *month = new int[test_case];
        int *date = new int[test_case];
        string * day_of_week = new string[test_case];
    
        for(int i = 0; i < test_case; i++){
            int flag = -1;
            cin>>month[i]; //7월 
            cin>>date[i]; //28일
            cin>>day_of_week[i]; //토요일
    
            int day = mapping_day.find(day_of_week[i])->second;
    
            if(month[i] == 4 || month[i] == 6 || month[i] == 9 || month[i] == 11){
                flag = 0;
                Calendar(day, date[i], flag, i, month[i]);
    
            }else if(month[i] == 2){
                flag = 1;
                Calendar(day, date[i], flag, i, month[i]);
    
            }else{
                flag = 2;
                Calendar(day, date[i], flag, i, month[i]);
            }
        }
    
        for(int i = 0; i < test_case; i++){
            for(int j = 0; j < 7; j++){
                cout<<result[i][j]<<" ";
            }
            cout<<endl;
        }
        return 0;
    }
    
    int MinusModular(int day, int date, int month){
        int temp_result = date - day;
    
        if(month == 5 || month == 7 || month == 10 || month == 12){
            return (MAX2 + temp_result) - 1;
        }
        else if(month == 3){
            return (MAX3 + temp_result) - 1;
        }
        else{
            return (MAX1 + temp_result) - 1;
        }
    }
    
    void Calendar(int day, int date, int flag, int idx, int month){
        int temp = 0;
        if(date - day <= 0){
            temp = MinusModular(day, date, month);
            if(month == 5 || month == 7 || month == 10 || month ==  12){
                for(int i = 0; i < 7; i++){
                    result[idx][i] = arr30[temp % MAX2];
                    temp += 1;
                }
            }
            else if(month == 3){
                for(int i = 0; i < 7; i++){
                    result[idx][i] = arr28[temp % MAX3];
                    temp += 1;
                }
            }
            else{
                for(int i = 0; i < 7; i++){
                    result[idx][i] = arr31[temp % MAX1];
                    temp += 1;
                }
            }
        }
        else{
            temp = (date - day) - 1; 
            if(flag == 0){
                for(int i = 0; i < 7; i++){
                    result[idx][i] = arr30[temp % MAX2];
                    temp += 1;
                }
            }else if(flag == 1){
                for(int i = 0; i < 7; i++){
                    result[idx][i] = arr28[temp % MAX3];
                    temp += 1;
                }
            }else{
                for(int i = 0; i < 7; i++){
                    result[idx][i] = arr31[temp % MAX1];
                    temp += 1;
                }
            }
        }
    }
    

    7년 전
1개의 댓글이 있습니다.
  • keith
    keith

    소스를 찬찬히 훑어보진 않았지만,
    아마도 Access Violation 에러가 아닐까 싶습니다..
    예상하기로는,

    int arr31[MAX1] = {0,};
    int arr30[MAX2] = {0,};
    int arr28[MAX3] = {0,};
    int result[100][7] = {0,};
    

    배열 선언부분에 의심이 조금 갑니다.^^;
    보통 날짜가 1부터 시작하는데, 인덱스는 0부터 시작일텐데..
    배열을 하나씩 더 늘려서 잡아보세용..


    7년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.