지우너

[PCCE 기출문제/C++] 8번 / 창고 정리 본문

Problem Solving

[PCCE 기출문제/C++] 8번 / 창고 정리

지옹 2023. 12. 6. 10:43

코드를 실행하면 매개변수로 들어온 num 벡터에 들어있는 수 중 가장 큰 수가 출력된다.

["pencil", "pencil", "pencil", "book"], [2, 4, 3, 1] 이 입력으로 주어졌다면, [2, 4, 3, 1] 중 가장 큰 수인 4가 출력으로 나오게 코드가 짜여있다.

 

아래는 문제에서 주어진 코드에 주석을 달아본 것이다.

#include <string>
#include <vector>

using namespace std;

// <parameter>
// vector<string> storage: 정리 전 창고
// vector<int> num: 정리 전 창고 인덱스에 들어있는 물건의 수
string solution(vector<string> storage, vector<int> num) {
    int num_item = 0;
    vector<string> clean_storage(storage.size());
    vector<int> clean_num(num.size());
    
    
    for(int i=0; i<storage.size(); i++){
        int clean_idx = -1;
        
        // clean_storage에 중복이 되지 않게 storage의 아이템을 넣기
        // storage의 아이템이 clean_storage에 없으면 clean_idx=-1이고,
   		// 아래의 조건문(if)에서 아이템의 이름을 clean_storage, 갯수를 clean_num에 넣어준다.
        // 같은 item을 찾으면 즉시 내부반복문(j)를 break
        // clean_idx = j; 이므로 else에서 해당 위치에 있는 아이템의 갯수를 더해준다.
        for(int j=0; j<num_item; j++){
            if(storage[i] == clean_storage[j]){
                clean_idx = j;
                break;
            }
        }
        
        // 같은 아이템을 못 찾은 경우
        if(clean_idx == -1){
        	// 아래 clean_storage[num_item] = to_string(num[i]); 코드가 문제.
            // clean_storage에 저장되어야 하는 것은
            // num[i]<- 갯수가 아니라 storage[i]에 들어있는 물건이 뭔지 저장되어야 한다.
            clean_storage[num_item] = to_string(num[i]);
            clean_num[num_item] = num[i];
            num_item += 1;
        }
        // 같은 아이템을 찾은 경우
        else{
            clean_num[clean_idx] += num[i];
        }
    }
    
    // 아래 코드에는 틀린 부분이 없습니다.
    
    
    // output: 가장 수가 많은 물건의 이름 string
    int num_max = -1;
    string answer = "";
    for(int i=0; i<num_item; i++){
        if(clean_num[i] > num_max){
            num_max = clean_num[i];
            answer = clean_storage[i];
        }
    }
    return answer;
}