switch 문에 대해 질문 드리고 싶습니다!

조회수 486회

백준 2007년이라는 문제입니다. 2007년 1월1일이 월요일일때 x월 y일이 무슨요일인지 출력하는 문제입니다. switch문을 활용해서 문제를 풀고자 했는데 제대로 작동하지가 않네요..... switch문을 잘못쓴거같긴한데... 정확히 뭘 어떻게 잘못 썼는지 잘 모르겠습니다...ㅠㅠ 도와주세요 ㅠㅠ

#include<stdio.h>
int main(void){
    int x,y;
    int sum, day = 0;
    int i;
    scanf("%d %d",&x, &y);
    for(i=0;i<x;i++){
        switch(i){
            case '1':
            case '3':
            case '5':
            case '7':
            case '8':
            case '10':
            case '12':
                sum  = sum + 31;
                break;
            case '4':
            case '6':
            case '9':
            case '11':
                sum  = sum +30;
                break;
            case '2':
                sum  = sum +28;
                break;
        }
    }
    day = sum + y;
    day = day%7;
    switch(day){
        case '0': printf("SUN\n"); break;
        case '1': printf("MON\n"); break;
        case '2': printf("TUE\n"); break;
        case '3': printf("WEN\n"); break;
        case '4': printf("THU\n"); break;
        case '5': printf("FRI\n"); break;
        case '6': printf("SAT\n"); break;
    }
    return 0;
}
  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 필요한 얘기: switch 의 case 문에서 사용되는 i 변수값의 형을 맞춰 주세요. '8' 말고 8을 쓰시면 작동할 겁니다.

    안 필요한 얘기: 저라면 diff 개념으로 접근하겠습니다. moment.js, Carbon 등 여러 언어의 날짜 라이브러리가 diff를 사용하고 지원합니다. 기왕 mod 연산을 사용하신다면 전체적으로 이 접근이 좀더 논리적으로 깨끗한 것 같습니다.

    x = 1, y = 1
    → 1월 1일과 diff = 0
    → 월요일

    #include<stdio.h>
    
    int main(void) {
        int x, y;
        int i;
        int diff = 0; // 1월 1일과 입력된 날짜 사이의 차이(difference)
    
        // 테스트용 입력. 달력을 열어보면 2007년 12월 11일은 화요일이고 1월 1일은 월요일이다.
        x = 12;
        y = 11;
        // scanf("%d %d",&x, &y);
        printf("%d/%d/2007 : ", x, y);
    
        for (i = 0; i < x; i++) {
            switch (i) {
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    diff += 31;
                    break;
                case 4:
                case 6:
                case 9:
                case 11:
                    diff += 30;
                    break;
                case 2:
                    diff += 28;
                    break;
            }
        }
        // 만약 x = 1, y = 1이라면 여기까지 왔을 때 diff = 0
        // 이때 diff += y 만 실행하면 diff = 1 이므로 1월 1일이 화요일로 찍힌다.
        // 현재 mod 연산을 통한 "차이"를 이용해 계산하고 있으므로, -1 이 필요하다.
        diff += y - 1;
        switch (diff % 7) {
            case 0: printf("MON\n"); break;
            case 1: printf("TUE\n"); break;
            case 2: printf("WED\n"); break; // wednesday 의 줄임말은 wed
            case 3: printf("THU\n"); break;
            case 4: printf("FRI\n"); break;
            case 5: printf("SAT\n"); break;
            case 6: printf("SUN\n"); break;
        }
        return 0;
    }
    

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

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

(ಠ_ಠ)
(ಠ‿ಠ)