본문 바로가기
Python/알고리즘

[COS PRO 2급 #6-2] 종이 나누어 주기

by 포푸리 (POPOOLY) 2023. 2. 8.
반응형

문제설명

한 줄로 서 있는 사람들에게 종이를 다음과 같은 방법으로 나눠주려 합니다.

* 종이 K 장을 맨 앞사람에게 줍니다.
* 맨 앞사람은 자신이 필요한만큼 종이를 챙긴 후, 남은 종이를 뒷사람한테 전달합니다.
* 뒷사람 또한 자신이 필요한만큼 종이를 챙긴 후, 남은 종이를 뒷사람에게 전달합니다.
* 전달할 종이가 없거나, 모든 사람이 필요한 만큼 종이를 가질 때까지 계속해서 뒷사람에게 남은 종이를 전달합니다.

한 줄로 서 있는 사람들이 각자 필요로 하는 종이 수가 순서대로 들어있는 리스트 papers, papers의 길이 papers_len, 처음에 맨 앞사람에게 전달한 종이 수 K가 매개변수로 주어질 때, 필요한 만큼의 종이를 받은 사람은 모두 몇 명인지 return 하도록 solution 함수를 작성했습니다. 그러나, 코드 일부분이 잘못되어 있기 때문에 몇몇 입력에 대해서는 올바르게 동작하지 않습니다. 주어진 코드에서 _**한 줄**_만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정하세요.

매개변수 설명

한 줄로 서 있는 사람들이 각자 필요로 하는 종이 수가 순서대로 들어있는 리스트 papers, papers의 길이 papers_len, 처음에 맨 앞사람에게 전달한 종이 수 K가 solution 함수의 매개변수로 주어집니다

* papers의 각 원소는 1 이상 20 이하인 자연수입니다.
* papers_len은 1 이상 20 이하입니다.
* K는 1 이상 400 이하인 자연수입니다.

return 값 설명

필요한 만큼의 종이를 받은 사람은 모두 몇 명인지 return 해주세요.

예시

| papers          | papers_len | K  | return |
|-----------------|------------|----|--------|
| [2, 4, 3, 2, 1] | 5          | 10 | 3      |
| [2, 4, 3, 2, 1] | 5          | 14 | 5      |

예시설명

예시 #1

맨 앞 사람부터 순서대로 [2장, 4장, 3장, 2장, 1장]의 종이가 필요합니다.

* 맨 앞사람이 종이 2장을 가지고 남은 8장을 뒷사람에게 넘깁니다.
* 두 번째 사람이 종이 4장을 가지고 남은 4장을 뒷사람에게 넘깁니다.
* 세 번째 사람이 종이 3장을 가지고 남은 1장을 뒷사람에게 넘깁니다.
* 네 번째 사람은 종이 2장이 필요한데 넘어온 종이는 1장이므로 원하는 종이 개수만큼 가질 수 없습니다.
* 나머지 사람들도 종이를 원하는 개수만큼 가질 수 없습니다.

따라서 필요한 만큼의 종이를 받는 사람은 3명입니다.

예시 #2

모든 사람이 필요한 만큼의 종이를 받을 수 있습니다.

문제 코드

def solution(papers, K):
    length = len(papers)
    for i, paper in enumerate(papers):
        K -= paper
        if K < 0:
            length = i
    return length

풀이

def solution(papers, K):
    length = len(papers)
    for i, paper in enumerate(papers):
        K -= paper
        # 남은 종이가 0보다 작으면 이전 사람까지 필요한 종이 받음
        if K < 0:
            return i
            
    # 종이가 남으면 모든 사람이 필요한 종이 받음
    return length

댓글