지우너
[PCCE 기출문제/C++] 8번 / 창고 정리 본문
코드를 실행하면 매개변수로 들어온 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;
}
'Problem Solving' 카테고리의 다른 글
[프로그래머스] C++ 세균 증식 (0) | 2024.02.29 |
---|---|
[프로그래머스 / Lv.0] 최빈값 구하기 cpp (0) | 2023.12.06 |
[프로그래머스] lv.0 그림확대 (0) | 2023.12.05 |
[백준(BOJ)] 1517 버블소트 C++ (0) | 2023.03.01 |
[백준(BOJ)] 2805 나무 자르기 CPP (0) | 2023.02.22 |