728x90
📌문제 출처
코드트리 삼성 SW 역량테스트 기출문제
https://www.codetree.ai/training-field/frequent-problems/problems/virus-detector
📗 풀이 코드
- solution 1 : ceil 사용
import math
def solution(n,customers, manager, member):
return n + sum([(math.ceil((tmp_c - manager) / member)) if tmp_c >= manager else 0 for tmp_c in customers])
if __name__ == '__main__':
a,b,c = open(0).readlines()
n = int(a)
customers = map(int,b.split())
manager, member = map(int,c.split())
print(solution(n,customers,manager,member))
- solution 2 : divmod, if 문 사용
def solution(n,customers, manager, member):
ans = n
for tmp_c in customers :
if tmp_c <= manager :
continue
a,b = divmod(tmp_c-manager,member)
ans += a+1 if b else a
return ans
if __name__ == '__main__':
a,b,c = open(0).readlines()
n = int(a)
customers = map(int,b.split())
manager, member = map(int,c.split())
print(solution(n,customers,manager,member))
💯 풀이 설명
- 하나의 식당마다 팀장은 한명씩 무조건 들어가므로 적어도 n명의 팀장이 필요하다.
- 따라서 이후 팀원의 수를 파악할 때는 팀장 한 명이 체크하는 고객 수는 미리 빼고 남은 고객 수를 확인한다.
- 이때 식당 고객 수 보다 팀장이 체크하는 고객 수가 많아 남은 고객 수가 없다면 그 식당은 더이상 직원이 필요없다.
- (남은 고객 수/팀원 한 명이 체크하는 고객 수) 연산 시 나머지가 있다면 몫에 1을 더한만큼 직원이 필요하고,
나머지가 없다면 몫만큼 직원이 필요하다.
이 연산을 solution 1에서는 ceil 함수를 써줬고, solution 2에서는 divmod로 몫과 나머지를 구하여 조건문으로 해결했다. - 결과는 ceil 함수를 써준 것이 약간 더 빨랐다.
'파이썬 문제풀이' 카테고리의 다른 글
[코드트리 삼성기출] 조삼모사 (0) | 2023.10.06 |
---|---|
[코드트리 삼성기출] 외주 수익 최대화하기 (0) | 2023.10.06 |
[백준 파이썬] 9935 문자열 폭발 (0) | 2023.09.28 |
[백준 파이썬] 1707 이분 그래프 (0) | 2023.09.24 |
[백준 파이썬] 2566 최댓값 (0) | 2023.09.14 |