본문 바로가기
강좌/PCCE 기출문제(파이썬)

[PCCE 기출문제][파이썬] 8. 창고 정리

by Moons0827 2024. 8. 27.
반응형

문제는 아래 주소에서 풀 수 있습니다.

코딩테스트 연습 - [PCCE 기출문제] 8번 / 창고 정리 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


문 제

선빈이는 게임을 즐기던 중 가지고 있는 물건이 너무 많아 창고 정리를 하기로 했습니다. 선빈이가 보유한 게임 속 창고는 여러 칸으로 나누어져 있고 각 칸에는 물건들이 담겨있습니다. 창고를 정리할 방법을 고민하던 선빈이는 같은 물건이 여러 칸에 나누어 들어있는 것을 발견하고 우선 같은 물건끼리 최대한 겹쳐쌓는 방식으로 창고를 정리하기로 했습니다. 선빈이의 창고에 들어있는 물건의 이름과 개수는 리스트 형태로 주어지며, 한 칸에 겹쳐질 수 있는 물건의 개수에는 제한이 없다고 가정합니다.

예를 들어 창고의 각 칸에 담겨있는 물건의 이름이storage = ["pencil", "pencil", "pencil", "book"], 각 물건의 개수가 num = [2, 4, 3, 1]이라면 연필과 책을 한 칸에 각각 겹쳐 쌓아 간단하 clean_storage = ["pencil", "book"], clean_num = [9, 1]로 만들 수 있습니다.

주어진 solution 함수는 정리되기 전 창고의 물건 이름이 담긴 문자열 리스트 storage와 각 물건의 개수가 담긴 정수 리스트 num이 주어질 때, 정리된 창고에서 개수가 가장 많은 물건의 이름을 return 하는 함수입니다. solution 함수가 올바르게 작동하도록 한 줄을 수정해 주세요.


제한 사항

1 ≤ storage의 길이 = num의 길이 ≤ 30
storage[i]는 영어 대소문자로 이루어져 있습니다.
물건은 대소문자를 구분합니다. 즉, "Book"과 "book"은 서로 다른 물건입니다.
1 ≤ storage[i]의 길이 ≤ 30
1 ≤ num[i] ≤ 20
num[i]에는 storage[i]에 해당하는 물건의 개수가 담겨있습니다.
가장 개수가 많은 물건이 두 가지 이상인 경우는 없습니다.
한 칸에는 한 종류의 물건만 들어갈 수 있습니다.


입출력 예

입출력 예 #1
본문에 설명된 대로 창고를 정리하면 clean_storage = ["pencil", "book"], clean_num = [9, 1]이 됩니다. 따라서 가장 개수가 많은 물건인 "pencil"을 return합니다.

입출력 예 #2
창고를 정리하면 clean_storage = ["doll"], clean_num = [4]가 됩니다. 따라서 가장 개수가 많은 물건인 "doll"을 return합니다.

입출력 예 #3
창고를 정리하면 clean_storage = ["apple", "steel", "leaf"], clean_num = [8, 3, 12]가 됩니다. 따라서 가장 개수가 많은 물건인 "leaf"를 return합니다.

입출력 예 #4
창고를 정리하면 clean_storage = ["mirror", "net", "bottle"], clean_num = [8, 2, 5]가 됩니다. 따라서 가장 개수가 많은 물건인 "mirror"를 return합니다.


주어진 코드

def solution(storage, num):
    clean_storage = []
    clean_num = []
    for i in range(len(storage)):
        if storage[i] in clean_storage:
            pos = clean_storage.index(storage[i])
            clean_num[pos] += num[i]
        else:
            clean_storage.append(num[i])
            clean_num.append(num[i])
            
    # 아래 코드에는 틀린 부분이 없습니다.
            
    max_num = max(clean_num)
    answer = clean_storage[clean_num.index(max_num)]
    return answer

정 답

def solution(storage, num):
    clean_storage = []
    clean_num = []
    for i in range(len(storage)):
        if storage[i] in clean_storage:
            pos = clean_storage.index(storage[i])
            clean_num[pos] += num[i]
        else:
            clean_storage.append(storage[i])
            clean_num.append(num[i])
            
    # 아래 코드에는 틀린 부분이 없습니다.
            
    max_num = max(clean_num)
    answer = clean_storage[clean_num.index(max_num)]
    return answer

9번째 줄 clean_storage.append(num[i]) 을 clean_storage.append(storage[i]) 로 수정

lean_storage에는 각 고유한 storage 값이 저장되어야 하기 때문에, num[i] 대신 storage[i]를 추가해야 합니다.


해 설

1. 1번째 줄:  함수는 두 개의 리스트 storage와 num을 인자로 받습니다.

2. 2~3번째 줄: clean_storage,  clean_num 2개의 리스트를 초기화 합니다.

3. 4번째 줄: storage의 리스트 길이만큼 반복합니다.

4. 5~7번째 줄: storage[i] 값이 이미 clean_storage에 존재한다면, storage[i]가 clean_storage에서 있는 위치를 찾습니다. 해당 인덱스(pos)의 clean_num 값에 새로운 num[i] 값을 더해줍니다. 

5. 8~10번 째 줄: storage[i]가 clean_storage에 존재하지 않을 때 새로운 항목(storage[i])을 clean_storage 리스트에 추가합니다. 그런 다음 그 항목에 해당하는 num[i] 값을 clean_num 리스트에 추가합니다.

6. 14~16번째 줄: clean_num 리스트에서 가장 큰 숫자를 찾습니다. 이 숫자를 max_num에 저장합니다. 다음 가장 큰 숫자의 위치(인덱스)를 반환하여, clean_storage에서 해당하는 항목을 찾아 answer에 저장합니다.


 

반응형

댓글