일을 월단위로 바꿔주는 프로그램

조회수 632회
#include <iostream>

using namespace std;

void mthchange(int day) {

    int mday = 0, mth = 0;
    int arr[12] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30};

    while (mday <= day) {

        mday += arr[mth];
        mth++;  
    }

    cout << mth << "월 " << day - mday << "일" << endl;
}

int main (void) {

    int i;

    cin >> i;

    mthchange(i);

    return 0;
}

이리 했는데.. 12 입력하면 2월 -19일이라 뜨네요..

  • IDE에서 break point 걸고 디버그 고고!! doodoji 2018.9.20 20:08

2 답변

  • 좋아요

    1

    싫어요
    채택 취소하기
    #include <iostream>
    
    using namespace std;
    
    void mthchange(int day) {
        int mday = day, mth = 0;
        int arr[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    
        for (mth = 0; mday > arr[mth]; mth = (mth + 1) % 12) //해당 월의 일수보다 작거나 같아지면 종료
        {
            mday -= arr[mth];
        }
        cout << mth + 1 << "월 " << mday << "일" << endl;
    }
    
    int main(void) {
    
        int i;
    
        cin >> i;
    
        mthchange(i);
    
        return 0;
    }
    

    366 이상 입력해도 원하는 값을 얻을 수 있을것입니다.

    윤년처리는 제외시켰습니다.

    • 혹시 어떻게 해서 이런 식이 나왔는지 알고리즘 형태로 설명 해주시면 안될까요? 잘 이해가 안되네요 ㅠㅠ Promixium 2018.9.27 11:00
    • for문을 하나씩 하나씩 돌려보시면 이해하실 수 있을거에요 전대호 2018.9.27 11:29
    • mday에 15와 45 그리고 75라는 숫자를 넣고 각각 해보세요 전대호 2018.9.27 11:30
    • 감사합니다! Promixium 2018.9.27 11:55
  • 코드를 최소한으로 수정하는 방향으로 살려보자면 while문 조건만 바꿔 보는걸로 해 보시죠.

    while (mday + arr[mth] < day)
    

    이게 될거 같은데 실행 안 해봐서 정확하게 모르겠습니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)