ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1970. 쉬운 거스름돈
    코딩 테스트/SW Expert Academy 2021. 6. 23. 20:33

    https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=2&contestProbId=AV5PsIl6AXIDFAUq&categoryId=AV5PsIl6AXIDFAUq&categoryType=CODE&problemTitle=&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=2&pageSize=30&pageIndex=1 

     

    SW Expert Academy

    SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

    swexpertacademy.com

     

     

    문제 이해

     -> 주어진 금액에서 거스름돈을 돌려주되, 최소 개수로 돌려주기 위한 프로그램

     -> N이 32850일 경우,
         50,000 원 : 0개
         10,000 원 : 3개
         5,000 원 : 0개
         1,000 원 : 2개
         500 원 : 1개
         100 원 : 3개
         50 원 : 1개
         10 원 : 0개

     

    문제 주의

     -> N은 10이상 1,000,000이하의 정수

     -> N의 마지막 자릿수는 항상 0

     

    -> 단, 실제 문제에서는 끝 자리수가 0이 아닌 경우가 존재    // 문제 오류

     

     

    문제 풀이 (1)

     -> 주어진 금액에서 화폐단위보다 크다면 화폐단위 범위에 맞는 금액을 뺄셈한다.

     -> 그 후 goto 문을 통해 위 방식을 반복한다.

     -> 화폐단위에서 뺄 수 없을 때 사용된 거스름돈의 각 개수를 출력 양식에 맞춰 출력한다.

     

    #include<iostream>
    using namespace std;
    
    int main()
    {
        int testCount, testCase;
        cin >> testCount;
        
        int a, b, c, d, e, f, g, h;
        
        for (int i = 0; i < testCount; i++)
        {
            cin >> testCase;
            
            a = b = c = d = e = f = g = h = 0;
    
    checkPoint:        
            if (testCase >= 50000)
            {
                testCase -= 50000;
                a++;
                goto checkPoint;
            }
            else if(testCase >= 10000 && testCase < 50000)
            {
                testCase -= 10000;
                b++;
                goto checkPoint;
            }
            else if(testCase >= 5000 && testCase < 10000)
            {
                testCase -= 5000;
                c++;
                goto checkPoint;
            }
            else if(testCase >= 1000 && testCase < 5000)
            {
                testCase -= 1000;
                d++;
                goto checkPoint;
            }
            else if(testCase >= 500 && testCase < 1000)
            {
                testCase -= 500;
                e++;
                goto checkPoint;
            }
            else if(testCase >= 100 && testCase < 500)
            {
                testCase -= 100;
                f++;
                goto checkPoint;
            }
            else if(testCase >= 50 && testCase < 100)
            {
                testCase -= 50;
                g++;
                goto checkPoint;
            }
            else if(testCase >= 10 && testCase < 50)
            {
                testCase -= 10;
                h++;
                goto checkPoint;
            }
            else if (testCase < 10)
            {
                cout << "#" << i + 1 << endl;
                cout << a << " " << b << " " << c << " " << d << " " << e << " " << f << " " << g << " " << h << endl;
            }
        }
        
    	return 0;
    }

     

     

     

     

     

    문제 풀이 (2)

     -> 화폐단위를 배열로 만들고 각 단위에 맞게 할당한다.

     -> 주어진 금액이 들어오면 화폐 단위로 나누어 몫을 출력한다.

     -> 만약, 37,520원이 들어오면 50,000으로 나누었을 때 몫이 0이므로 0을 출력한다.

     -> 그 후, 화폐 단위를 내려 금액에 다시 나누어 몫을 출력한다.

     -> 50,000원으로 못 나누었으나 10,000원으로 나눌 수 있으므로 몫 3을 출력한다.

     -> 37,520원에서 10,000원으로 나눗셈 연산하고 남은 나머지를 저장한다.    // 7520원

     -> 그 후, 화폐 단위를 내려 금액에 다시 나누어 몫을 출력한다.

     -> 7,520원에서 5,000원으로 나눌 수 있으므로 몫 1을 출력한다.

     -> 7,520원에서 5,000원으로 나눗셈 연산하고 남은 나머지를 저장한다.    // 2520원

     -> 위와 같은 방법을 반복하고 10원 단위의 연산까지 마친다면 프로그램을 종료한다.

     

    #include<iostream>
    using namespace std;
    
    int main()
    {
        int testCount, testCase;
        cin >> testCount;
        
        for (int i = 0; i < testCount; i++)
        {
            cin >> testCase;
            
            int money[] = { 50000, 10000, 5000, 1000, 500, 100, 50, 10 };
            
            cout << "#" << i + 1 << endl;
            
            for (int j = 0; j < 8; j++)
            {
                cout << testCase / money[j] << " ";
                testCase %= money[j];
            }
            
            cout << endl;
        }
    	return 0;
    }

     

     

    '코딩 테스트 > SW Expert Academy' 카테고리의 다른 글

    1928. Base64 Decoder  (0) 2021.06.28
    1954. 달팽이 숫자  (0) 2021.06.24
    1989. 초심자의 회문 검사  (0) 2021.06.23
    1945. 간단한 소인수분해  (0) 2021.06.22
    1986. 지그재그 숫자  (0) 2021.06.22

    댓글