Algorithm Problems

[Cos Pro 2급] 5차 10번 - 교대 근무 일등

WakaraNai 2021. 2. 7. 10:32
728x90
반응형

문제

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

 

예시 설명

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

 

 

풀이설명

 

N명을 나열한 순서는 전체 근무 시간표 길이의 나머지의 값과 동일한 인덱스 번호를 가질 수 밖에 없다는 점에서 착안

나머지는 0부터 자기자신보다 하나 작은 수 N-1
이는 N명에 대해 각 사람에 대해 0번부터 시작하여 순서대로 번호를 붙여 호명하는 것과 같아진다
그러므로 각 사람의 근무시간을 리스트에 담아 인덱스로 접근하는 것이 편리하다

max(리스트이름)을 사용하여 최장 근무시간을 알아낼 수 있다.

Python

 

def solution(time_table, n):
    people = [0]*n
    
    for i in range(n):
        for j in range(i, len(time_table) ,n):
            people[i] += time_table[j]

    return max(people)

 

 

def solution(time_table, n):
    people = [0]*n
    
    for i in range(len(time_table)):
    	people[i%n] += time_table[i]

    return max(people)
728x90
반응형