본문 바로가기
Python/알고리즘

[COS PRO 2급 #5-10] 가장 오래 일한 사람을 구해주세요

by 포푸리 (POPOOLY) 2023. 2. 7.
반응형

문제설명

n명이 시간표에 따라 교대 근무에 들어갑니다. 이때 가장 오래 일한 사람이 몇 시간 일했는지 알아내려 합니다. 근무 순번은 첫 번째 사람부터 n번째 사람 순으로 합니다. n번 사람이 일을 한 뒤에는 다시 첫 번째 사람부터 일을 합니다.

예를 들어 시간표가 [1, 5, 1, 9]이고 n이 3이면 첫 번째 사람은 1+9시간, 두 번째 사람은 5시간, 세 번째 사람은 1시간 근무합니다. 따라서 첫 번째 사람이 가장 오래 일했으며, 10시간 일했습니다.

근무 시간표를 담은 리스트 time_table과 사람 수 n이 매개변수로 주어질 때, 가장 오래 일한 사람은 몇 시간 일했는지 return 하도록 solution 함수를 작성해주세요.

매개변수 설명

시간표를 담은 리스트 time_table과 사람 수 n이 solution 함수의 매개변수로 주어집니다.
* time_table의 길이는 1 이상 100 이하입니다.
* time_table의 원소는 1 이상 100 이하인 자연수입니다.
* n은 1 이상 `time_table의 길이` 이하인 자연수입니다.

return 값 설명

가장 오래 일한 사람이 몇 시간 일했는지 return 합니다.

예시

| time_table |n|return |
|---|---|------|
|[1, 5, 1, 9] |3| 10|
| [4, 8, 2, 5, 4, 6, 7]|4 | 14|

예시설명

예시 #1
앞선 예와 같습니다.

예시 #2
첫 번째 사람은 4+4시간만큼 근무를 합니다.
두 번째 사람은 8+6시간만큼 근무를 합니다.
세 번째 사람은 2+7시간만큼 근무를 합니다.
네 번째 사람은 5시간만큼 근무를 합니다.
따라서, 가장 오래 근무를 한 사람은 14시간 일했습니다.

문제 코드

def solution(time_table, n):
    #여기에 코드를 작성해주세요.
    answer = 0
    return answer

풀이 1

def solution(time_table, n):
	answer = []
    
    # 직원별 근무시간을 answer에 추가
	for i in range(len(time_table)):
		temp = 0
		while i < len(time_table):
			temp += time_table[i]
			i += n
		answer.append(temp)
	
	answer = max(answer)
		
	return answer

풀이 2

def solution(time_table, n):
    answer = 0
    lst = [0 for _ in range(n)]
    
    # x번째 사람은 x, x+n, x+2n 순서에 들어가므로 교대근무 순서를 n으로 나눈 나머지가 항상 같음
    for i, t in enumerate(time_table):
    	lst[i % n] += t
    answer = max(lst)
    return answer

댓글