문제
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)
'Algorithm Problems' 카테고리의 다른 글
[Cos Pro 2급] 4차 3번 - 카드 게임 (0) | 2021.02.14 |
---|---|
[Cos Pro 1급] 3차 5번 - 암스트롱 수 (자아도취 수/ 나르시시즘 수) (0) | 2021.02.14 |
[Cos Pro 2급] 5차 9번 - 학생별 석차 출력 (0) | 2021.02.06 |
[Cos Pro 2급] 4차 1번 - 사다리타기 (0) | 2021.02.06 |
에라토스테네스의 체 - pygame으로 설명 (0) | 2021.02.04 |