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

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

by M개발자 2021. 5. 27.
반응형

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


문제 설명

 

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언어

 

 

 

반응형

댓글