[#86][자격증] 정보처리기사 실기 알고리즘 (화폐 매수 구하기)

정보처리기사 실기 알고리즘 (화폐 매수 구하기)









----------------------------정답----------------------------------
① 50000
② PM(K)
③ T - (PM(K) * M)
④ M/2
⑤ TM(K) + PM(K)
-------------------------------------------------------------------

▶ N="QUIT"일 때 TM(K) 출력하므로, TM(K)는 전체(누적) 화폐 매수( 답안 도출)
PM(K)는 인물 당 화폐 매수( 답안 도출)

▶ T에는 (필요한 매수 * 가격)을 빼고 남은 돈 저장(③ 답안 도출)
 T = T - (PM(T) * M)

▶화폐 단위 생각해보기 (①, ④답안 도출)
50,000   
(/5)
10,000   
(/2)
5,000   
(/5)
1,000   
(/2)
500   
(/5)
100     
(/2)
50     
(/5)
10 
(/2)   
5
(/5)     
1
 
C++구현
#include <iostream>
#include <string>
using namespace std;
int PM[11= { 0 }, TM[11= { 0 }, K, P, M, SW, T;
string N;
void countMoney(int t) {
    //알고리즘 구현
    for (K = 1; K <= 10; K++) {
        PM[K] = t / M;
        t = t - (PM[K] * M);
        
        if (SW == 1) {
            M = M / 5;
            SW = 0;
        }
        else {
            M = M / 2;
            SW = 1;
        }
    }
    cout << N << " " << T << " ";
    for (K = 1; K <= 10; K++) {
        cout << PM[K] << " ";
        TM[K] = TM[K] + PM[K];
    }
    cout << "\n";
}
int main(){
    
    while (1) {
        cin >> N;
        if (N=="QUIT") {
            cout << "전체화폐매수 ";
            for (K = 1; K <= 10; K++) {
                cout << TM[K] << " ";
            }
            cout << "\n";
            break;
        }
        else {
            cin >> P;        
        }
        
        T = P;
        M = 50000;
        SW = 1;
        countMoney(T);
    }    
    return 0;
}
cs

댓글

가장 많이 본 글