C언어 기초: 연봉 입력 받아 세금 계산하기

kevinkim2586·2020년 4월 11일
0
post-thumbnail

이번 문제는 연봉을 입력 받아서 세금을 계산하여 출력하는 프로그램이다.

출력 예시는 아래와 같다.

이번 문제는 특히 까다로웠던 이유가, 연봉이 일정 금액 이상 넘으면, 해당 금액에 대해서만 세금을 매기는 것이 아니였기 때문이다.예를 들어, 연봉이 $8000달러가 넘는다고 해서 $8000에만 세금 36%를 때는 것이 아니라, $8000 초과분에 대해서 36%, $4000 초과분에 대해서 27%, $1000 초과분에 대해서 18%, 그리고 $1000 이하는 9%의 세금을 매기는 형식의 문제였기 때문이다.

문제가 생각했던 것보다 복잡해서, 별 뻘짓을 다 했다. 아래는 뻘짓의 흔적들..

문제를 파악하는 것도 힘들었던 것 같다. 온갖 수법을 써봤지만 잘 풀리지 않았다.

반복문을 통해서도 풀린다고는 하는데, 나는 if문을 여러개 쓰는 것이 편할 것 같아 최대한 if문으로 해결하고자 했다.

연봉이 $8000달러 이상일 때 세율 계산만 해결하면 그 밑에는 술술 풀릴 것 같아 salary > 8000 에만 우선적으로 집중했다.

너무 복잡하게 생각하지 않고, 예제 출력을 보면서 차근차근 salary>8000 조건 하에서의 코드를 짜봤다:

if(salary>8000){

        printf("%d * 0.09 = %.0f\n", 1000, (1000*0.09));
        sumTax += (1000*0.09); //총 세금

        printf("%d * 0.18 = %.0f\n", 3000, (3000*0.18));
        sumTax += (3000*0.18);

        printf("%d * 0.27 = %.0f\n", 4000, (4000*0.27));
        sumTax += (4000*0.27);

        printf("%d * 0.36 = %.0f\n", (salary-8000), (salary-8000)*0.36);
        sumTax += (salary-8000)*0.36;
    
        printf("= %d", (int)sumTax);
    }
   

salary>8000 일 때의 코드를 짜니, 아래는 더욱 쉬워졌다:

#include <stdio.h>

int main(void) {

    int salary;
    double sumTax=0;
    
    scanf("%d", &salary);
  
    if(salary>8000){

        printf("%d * 0.09 = %.0f\n", 1000, (1000*0.09));
        sumTax += (1000*0.09);

        printf("%d * 0.18 = %.0f\n", 3000, (3000*0.18));
        sumTax += (3000*0.18);

        printf("%d * 0.27 = %.0f\n", 4000, (4000*0.27));
        sumTax += (4000*0.27);

        printf("%d * 0.36 = %.0f\n", (salary-8000), (salary-8000)*0.36);
        sumTax += (salary-8000)*0.36;
    
        printf("= %d", (int)sumTax);
    }
    else if(salary>4000 && salary<=8000){
        
        printf("%d * 0.09 = %.0f\n", 1000, (1000*0.09));
        sumTax += (1000*0.09);

        printf("%d * 0.18 = %.0f\n", 3000, (3000*0.18));
        sumTax += (3000*0.18);

        printf("%d * 0.27 = %.0f\n", (salary-4000), (salary-4000)*0.27);
        sumTax += ((salary-4000)*0.27);
        
        printf("= %d", (int)sumTax);
    }
    else if(salary>1000 && salary<=4000){
        
        printf("%d * 0.09 = %.0f\n", 1000, (1000*0.09));
        sumTax += (1000*0.09);

        printf("%d * 0.18 = %.0f\n", (salary-1000), (salary-1000)*0.18);
        sumTax += ((salary-1000)*0.18);
        
        printf("= %d", (int)sumTax);
    }
    else if(salary>=0 && salary<=1000){
        
        printf("%d * 0.09 = %.0f\n", salary, (salary*0.09));
        sumTax += (salary*0.09);
        
        printf("= %d", (int)sumTax);
    }
    
    return 0;
}

if 문으로 최대한 짜봤는데, 뭔가 또 비효율적인 것 같다. 이것 말고도 혹시 더 효율적이거나, 간결한 코드로 문제를 풀 수 있는 방법이 있으면 누가 알려줬으면 좋겠다 ㅠㅠ

천성 문과인 내가 이런 문제를 풀려니 머리가 너무 아팠다. 이 문제에만 1시간 이상 걸린 것 같다. 그런데도 내 힘으로 풀고, 실행이 되는 모습을 딱 봤을 때, 이루 말 할 수 없는 희열이 느껴졌다.

profile
공개적으로 학습하고자 만든 블로그

0개의 댓글