[#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 | 

댓글
댓글 쓰기