코딩 테스트/[c언어] cos pro 2급 기출문제

[No.50] 가장 오래 일한 사람을 구해주세요 / cos pro 2급 c언어 기출 문제 5차 문제 10

M개발자 2021. 5. 27. 22:43
반응형

가장 오래 일한 사람을 구해주세요


문제 설명

 

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);
}

cos pro 2급 기출문제

github

 

구름 goormedu COS PRO 2급 기출문제 - C언어

 

 

 

반응형