[C언어] 해결한 문제

[C언어] 상대 평가 학점 산출 프로그램

에게 묻다 2021. 3. 29. 20:28

이번 문제는 풀면서 화가 많이 났다.

일단 문제는 아래와 같았다.

 

문제는 단순하디 단순한 정말 기초 문제다.

근데

'switch문을 이용하여 작성'

이게 뭐지???? 

 

수업에서도 값의 구간을 이용할 때는 if문을 쓰라고 하셨는데 이게 뭐지 싶었다;;

 

'입력받은 등수 / 총 학생수 = 상위 n%' 를 이용해서 해봤는데 도저히 안되겠더라...테스트 케이스가 위와 같이 총 학생수가 100명만 있는것도 아니라하셨다.

 

그래도 구글링을 해보니

int n;   				//선언
scanf("%d", &n); 		//입력

switch (n){
case 1...100: 			//1~100
	printf("n은 1이상, 100이하의 값");
    break;
}

 

이런식으로 case에도 구간을 설정할 수 있단다.

근데 생각해보니 시작 구간은 이상이어도 종료 구간은 미만이어야 사용이 가능하더라

 

예를 들자면 A학점이 상위 10% 까지인데 상위 10%일때 1...10으로 하면 되겠지만 

다음 테스트 케이스인 B에서 10...30으로 사용이 안된다.

A학점과 B학점의 테스트 케이스 모두 10%를 포함하니 오류가 난다.

 

그래도 별 말 없이 문제를 푸는 수강생들이 있어서 내가 모르는 방법이 있을거라 믿어가면서 꾸역 꾸역했다.

.

.

.

.

.

.

그래도 안 풀렸다 ㅎㅎ..

 

한 두시간 쯤 지나서 더 이상은 안될 것 같다고 의사표명을 한 나의 대뇌의 말을 듣고 던졌다.

정확히는 if문으로 풀고 switch를 살짝 뿌렸다.

더보기

''   if문으로 푼 상대 평가 학점 산출 프로그램입니다. 근데 이제.... switch를 곁들인....   ''

#include <stdio.h>

int main(void) {
    int rank; //학생의 등수
    int num; //총 학생의 수
    int res; //결과
    
    printf("등수는: ");
    scanf("%d", &rank);
    printf("전체 인원수는: ");
    scanf("%d", &num);
    
    int score_rate = rank / num; //상위 n%를 나타내는 데이터
    
    if (score_rate * 100 <= 10) res = 1;
    else if (score_rate * 100 <= 30) res = 2;
    else if (score_rate * 100 <= 60) res = 3;
    else if (score_rate * 100 <= 90) res = 4;
    else res = 5;
    
    switch (res) {
        case 1:
            printf("A\n");
            break;
        case 2:
            printf("B\n");
            break;
        case 3:
            printf("C\n");
            break;
        case 4:
            printf("D\n");
            break;
        case 5:
            printf("F\n");
            break;
        default:
            break;
    }
    
    return 0;
}

 

솔직히 빠꾸(?) 먹을 줄 알았다.

 

누가 보더라도 if문으로 푼 솔루션에 switch를 얹은 건데

 

그런데 제출이 됐다.

??!?!?!?!?!?!?!?!?!??!

 

정확히는 조교님이 봐주셨다.

문제 오류라시더라 

아셨으면 교수님께 직언을 하십쇼 조교님!!!!

 

그뒤로 허탈하게 강의실을 나와서 욕을 했다.

 

아오 빡쳐!!!

 

 

이번일로 구간은 if문으로 처리하는게 Readability나 정신건강에 이롭다는 걸 느겼다.

그래도 case의 구간 설정하는건 나중에 써먹을 일이 있을것 같다.

 

몫과 나머지 연산으로 어떻게 굴리면 가능할 것 같긴 한데 난 잘 모르겠다.... 또르륵....

아무튼 여기까지!!

 

 

궁금한 점, 조언, 훈수 다 좋으니 댓글로 알려주시면 감사하겠습니다!

 

 

 

반응형