반응형
가장 오래 일한 사람을 구해주세요
문제 설명
n명이 시간표에 따라 교대 근무에 들어갑니다. 이때 가장 오래 일한 사람이 몇 시간 일했는지 알아내려 합니다. 근무 순번은 첫 번째 사람부터 n번째 사람 순으로 합니다. n번 사람이 일을 한 뒤에는 다시 첫 번째 사람부터 일을 합니다.
예를 들어 시간표가 [1, 5, 1, 9]이고 n이 3이면 첫 번째 사람은 1+9시간, 두 번째 사람은 5시간, 세 번째 사람은 1시간 근무합니다. 따라서 첫 번째 사람이 가장 오래 일했으며, 10시간 일했습니다.
근무 시간표를 담은 배열 time_table, 배열 time_table의 길이 time_table_len, 사람 수 n이 매개변수로 주어질 때, 가장 오래 일한 사람은 몇 시간 일했는지 return 하도록 solution 함수를 작성해주세요.
예시
time_table | time_table_len | n | return |
[1, 5, 1, 9] | 4 | 3 | 10 |
[4, 8, 2, 5, 4, 6, 7] | 7 | 4 | 14 |
코드 해석 및 전체 코드
코드 해석
인원수만큼의 배열 길이를 잡는다.
첫번째 for문에서 각각 얼마큼 일했는지 구한다. cnt는 인원수를 나타낸 수로, for문이 인원수보다 더 돌게 될 경우 다시 초기화하여 첫 번째 사람부터 넣을 수 있게 한다.
두 번째 for문은 가장 많이 일한 사람을 구한다. 인원수만큼 반복하여 a[i]가 answer보다 클 경우 a[i]를 저장한다.
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(int time_table[], int time_table_len, int n) {
int answer = 0;
int* a = (int*)malloc(sizeof(int) * n);
int cnt = 0;
for (int i = 0; i < time_table_len; i++) {
a[cnt] += time_table[i];
cnt++;
if (cnt == n) cnt = 0;
}
for (int i = 0; i < n; i++) {
if (answer < a[i]) answer = a[i];
}
return answer;
}
int main() {
int time_table1[] = { 1, 5, 1, 9 };
int time_table_len1 = 4;
int n1 = 3;
int ret1 = solution(time_table1, time_table_len1, n1);
printf("solution 함수의 반환 값은 %d 입니다.\n", ret1);
int time_table2[] = { 4, 8, 2, 5, 4, 6, 7 };
int time_table_len2 = 7;
int n2 = 4;
int ret2 = solution(time_table2, time_table_len2, n2);
printf("solution 함수의 반환 값은 %d 입니다.\n", ret2);
}
구름 goormedu COS PRO 2급 기출문제 - C언어
반응형
'코딩 테스트 > [c언어] cos pro 2급 기출문제' 카테고리의 다른 글
[No.52] 종이 나누어 주기 / cos pro 2급 c언어 기출 문제 6차 문제 2 (0) | 2021.05.28 |
---|---|
[No.51] 저는 따뜻한 날이 좋아요 / cos pro 2급 c언어 기출 문제 6차 문제 1 (0) | 2021.05.28 |
[No.49] 시험 등수 구하기 / cos pro 2급 c언어 기출 문제 5차 문제 9 (0) | 2021.05.27 |
[No.48] 상수도 요금 구하기. (물을 아껴 씁시다.) / cos pro 2급 c언어 기출 문제 5차 문제 8 (0) | 2021.05.26 |
[No.47] 계산대 두 개에서 계산 시간을 구해주세요! / cos pro 2급 c언어 기출 문제 5차 문제 7 (0) | 2021.05.26 |
댓글