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

이리·2024년 10월 17일
0

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/250126

주어진 코드를 해석해서 틀린 부분을 찾는 유형의 문제이다!
아무래도 주어진 코드의 변수를 이해하는 것이 시작점이라는 생각이 든다.


바꾼 코드

class Solution {
    public String solution(String[] storage, int[] num) {
        int num_item = 0;
        String[] clean_storage = new String[storage.length];
        int[] clean_num = new int[num.length];
        
        for(int i=0; i<storage.length; i++){
            int clean_idx = -1;
            for(int j=0; j<num_item; j++){
                if(storage[i].equals(clean_storage[j])){
                    clean_idx = j;
                    break;
                }
            }
            if(clean_idx == -1){
                clean_storage[num_item] = Integer.toString(num[i]);
                clean_num[num_item] = num[i];
                num_item += 1;
            }
            else{
                clean_num[clean_idx] += num[i];
            }
        }
        
        // 아래 코드에는 틀린 부분이 없습니다.
        
        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;
    }
}

변수가 의미하는 것

  • num_item : 정리된 물건의 개수
  • clean_storage: 정리된 물건의 문자열 배열
  • clean_num: 정리된 물건의 int형 배열

어떤 과정으로 작성된 코드일까?

  1. 첫번째 for문
for(int j=0; j<num_item; j++){
    if(storage[i].equals(clean_storage[j])){
        clean_idx = j;
        break;
    }
}

만약 storage에 clean_storage랑 동일한 이름이 있다면 해당 index를 j로 지정한다.

  1. if 문
if(clean_idx == -1){
      clean_storage[num_item] = storage[i];
      clean_num[num_item] = num[i];
      num_item += 1;
}

만약 clean_idx가 -1이라면 storage 항목이 clean_storage에 없다는 의미
⇒ clean_storage에 해당 이름을 넣고 해당하는 숫자를 clean_num에 넣어주게 됨
⇒ 정리된 항목의 숫자를 1개 늘려줘야함

  1. else 문
else{
      clean_num[clean_idx] += num[i];
}

해당 문자열이 clean_storage에 있을 경우
해당 문자열에 개수를 더해주기

끝!

post-custom-banner

0개의 댓글