◇ 문제 설명
한 줄로 서 있는 사름들에게 종이를 다음과 같은 방법으로 나눠주려 합니다.
▶ 종이 K장을 맨 앞사람에게 줍니다.
▶ 맨 앞 사람은 자신이 필요한 만큼 종일ㄹ 챙긴 후, 남은 종이를 뒷사람한테 전달합니다.
▶ 뒷 사람 또한 자신이 필요한 만큼 종이를 챙긴 후 남은 종이를 뒷사람에게 전달합니다.
▶ 전달할 종이가 없거나, 모든 사람이 필요한 만큼 종이를 가질때까지 계속해서 뒷사람에게 남은 종이를 전달합니다.
한 줄로 서 있는 사람들이 각자 필요로 하는 종이 수가 순서대로 들어있는 배열 papers, papers의 길이 papers_len 처음에 맨 앞사람에게 전달한 종이 수 K가 매개변수로 주어질때, 필요한 만큼의 종이를 받은 사람은 모두 몇 명인지 return하도록 solution함수를 작성했습니다. 그러나 코드 일부분이 잘못되어있기 때문에 몇몇 입력에 대해서는 올바르게 동작하지 않습니다. 주어진 코드에서 한 줄만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정하세요.
◇ 매개변수 설명
한 줄로 서 있는 사람들이 각자 필요로 하는 종이 수가 순서대로 들어있는 배열 papers, papers의 길이 papers_len 처음에 맨 앞사람에게 전달한 종이 수 K가 solution함수의 매개변수로 주어집니다.
▶ papers의 각 원소는 1이상 20이하인 자연수입니다.
▶ paers_len은 1이상 20이하입니다.
▶ K는 1이상 400이하인 자연수입니다.
◇ return값 설명
필요한 만큼의 종이를 받은 사람은 모두 몇 명인지 return해주세요.
◇ 예시
| papers | papers_len | K | return | |
| 예시 #1 | [2, 4, 3, 2, 1] | 5 | 10 | 3 |
| 예시 #2 | [2, 4, 3, 2, 1] | 5 | 14 | 5 |
◇ 예시 설명
예시 #1
맨 앞사람부터 순서대로 [2장, 4자, 3장, 2장, 1장]의 종이가 필요합니다.
▶ 맨 앞사람이 종이 2장을 가지고 남은 8장을 뒷사람에게 넘깁니다.
▶ 두번째 사람이 종이 4장을 가지고 남은 4장을 뒷사람에게 넘깁니다.
▶ 세번쨰 사람이 종이 3장을 가지고 남은 1장을 뒷사람에게 넘깁니다.
▶ 네번째 사람은 종이 2장이 필요한데 넘어온 종이는 1장이므로 원하는 종이 개수만큼 가질 수 없습니다.
▶ 나머지 사람들도 종이를 원하는 개수만큼 가질 수 없습니다.
따라서 필요한 만큼의 종이를 받은 사람은 3명입니다.
예시 #2
모든 사람이 필요한 만큼의 종이를 받을 수 있습니다.
◇ 초기 내용

◇ 답안
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(int papers[], int papers_len, int K) {
int length = papers_len;
for(int i = 0; i < papers_len; i++){
K -= papers[i];
if(K <= 0)
return i;
}
return length;
}
int main() {
int papers1[] = {2, 4, 3, 2, 1};
int papers_len1 = 5;
int K1 = 10;
int ret1 = solution(papers1, papers_len1, K1);
printf("solution 함수의 반환 값은 %d 입니다.\n", ret1);
int papers2[] = {2, 4, 3, 2, 1};
int papers_len2 = 5;
int K2 = 14;
int ret2 = solution(papers2, papers_len2, K2);
printf("solution 함수의 반환 값은 %d 입니다.\n", ret2);
}
◇ 답안 힌트
▶ K는 현재 가지고 있는 종이개수와 같습니다.
▶ 종이는 (음수)개가 될 수 없습니다.
◇ 답안 풀이
(※ 실행 흐름 순으로 해석됩니다.)
int solution(int papers[], int papers_len, int K) {
int length = papers_len;
// i부터 paper_len전까지 for문을 통해 반복
for(int i = 0; i < papers_len; i++){
//초기 종이 개수에서 papers[i], 즉 각 사람이 들고가는 종이수를 뺀다
K -= papers[i];
//만약 종이가 없으면 자신이 필요로하는 종이 수만큼 가져간 사람의 수를 return
// K == 0을 하면, K-=papers[i]에서 0이 아닌, -1이 나오면 끝내지 않고, 계속해서 음수값을 반환
if(K <= 0)
return i;
}
//만약 모든 사람이 다 자신이 필요로 하는 종이수 만큼 종이를 가져갔으면 모두가 가져갔다는 뜻해서 length 반환
return length;
}
◇ 실행결과

◇ 출처
COS PRO 2급 기출문제 - C언어 - 구름EDU
YBM IT에서 시행하는 COS Pro 자격증 기출문제를 직접 풀어볼 수 있는 실습 위주의 강좌입니다.
edu.goorm.io
'Cospro 2급 > C언어' 카테고리의 다른 글
| [6차] 문제4. 카드뽑기 게임! (도박은 안되요!) 답안 및 풀이 (0) | 2021.05.30 |
|---|---|
| [6차] 문제3. 단체 유니폼 맞추기 답안 및 풀이 (0) | 2021.05.30 |
| [6차] 문제1. 저는 따뜻한 날이 좋아요. 답안 및 풀이 (0) | 2021.05.30 |
| [5차] 문제10. 가장 오래 일한 사람을 구해주세요. 답안 및 풀이 (0) | 2021.05.30 |
| [5차] 문제9. 시험 등수 구하기 답안 및 풀이 (0) | 2021.05.30 |
댓글