문제설명
한 줄로 서 있는 사람들에게 종이를 다음과 같은 방법으로 나눠주려 합니다.
* 종이 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
댓글