알고리즘
[PCCE 기출문제] 8번 / 창고 정리
달려라 태깅이
2023. 12. 8. 19:06
https://school.programmers.co.kr/learn/courses/30/lessons/250126
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제풀이 및 코드해석
- 정리되기 전 창고의 물건이름이 담긴 문자열 리스트 storage
- 각 물건의 개수가 담긴 정수리스트 num
→ 정리된 창고에서 개수가 가장 많은 물건의 이름을 return 하라.
- storage 길이 = num 길이
- 물건은 영어 대소문자를 구분
- 가장 개수가 많은 물건이 두 가지 이상인 경우는 없음
- 정리 후 창고의 물건이름을 담을 문자열 리스트 clean_storage
- 정리 후 쌓은 물건의 개수 (같은 물건들의 개수 합)
class Solution {
public String solution (String[] storage, int[] num) {
int item_num = 0; //창고에 정리한 아이템 개수
int[] clean_storage = new int[num.length];
int[] clean_num = new int[num.length];
for(int i = 0; i < num.length; i++) {
int clean_idx = -1;
for(int j = 0; j < item_num; j++) {
//정리를 할 창고물건과 정리한 창고물건이 같다면,
//정리한 창고물건에 쌓아야 하기에 인덱스를 j(현재 물건 i가 정리된 위치 j) 로 변경
if(storage[i] == clean_storage[j]) {
clean_idx = j;
break;
}
}
//첫번째 물건
if(clean_idx == -1) {
clean_storage[item_num] = storage[i];
clean_num[item_num] = num[i];
item_num += 1;
}
//같은 물건이 다시 등장
else clean_num[clean_idx] += num[i];
}
int max = 0;
String answer = "";
// 정리된 창고에 있는 아이템 개수만큼 순회하면서
// 아이템별로 쌓인 개수가 최댓값일경우 answer에 해당물건의 이름을 넣어줌.
for(int i = 0; i < item_num; i++) {
if(clean_num[i] > max) {
max = clean_num[i];
answer = clean_storage[i];
}
}
return answer;
}
}