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; }
댓글 입력