-
1970. 쉬운 거스름돈코딩 테스트/SW Expert Academy 2021. 6. 23. 20:33
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