알고리즘

[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;
    }
}