*문제 출처는 프로그래머스에 있습니다.
문제 제목: 서버 증설 횟수 (2단계)
문제 사이트: https://school.programmers.co.kr/learn/courses/30/lessons/389479
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명

나의 풀이
def solution(players, m, k):
# server[i]는 i시부터 해당 시간대에 이미 운영 중인 증설 서버 수를 나타냅니다.
server = [0] * len(players)
server_cnt = 0 # 하루 동안 증설한 서버 총 횟수
for i in range(len(players)):
# 만약 해당 시간대의 이용자가 m명 이상이면 증설 대상
if players[i] >= m:
# [n*m, (n+1)*m) 구간에 해당하면 최소 n대의 서버가 필요함.
# 여기서 n은 floor division으로 구합니다.
required = players[i] // m # 필요한 서버 수 n
# 이미 할당된 서버(server[i])와 비교해서 부족한 서버가 있다면
if server[i] < required:
additional = required - server[i] # 추가로 증설해야 할 서버 수
# (required * m) <= players[i] < ((required+1) * m) 조건은 항상 만족하므로 그대로 진행
server_cnt += additional
# 추가 증설한 서버는 k시간 동안 유지되므로, i시부터 i+k-1시까지 서버 수를 갱신
for j in range(k):
if i + j < len(server):
server[i + j] += additional
else:
break
return server_cnt

※ 알아야 할 것
def solution(players, m, k):
answer = 0 # 증설 횟수
server = [-1] # 서버 최소 한 대는 있음
for i in range(len(players)):
n = len(server) # n은 서버의 수를 의미 한다
if players[i] <= (n * m): # 서버 1대당 사용자 수가 초과하는 경우 증설 해야함
supply = players[i] // m # 만들어야하는 서버
answer += supply
for _ in range(supply):
server.append(i + k - 1) # 서버
n = len(server) # n은 서버의 수를 의미 한다
for j in range(n, -1, -1):
if i == server[j]:
server.pop(j)
return answer
서버가 최소 한 대 있어야하는 잘못된 로직을 이용해서 문제가 발생했습니다.
'Coding Test > 프로그래머스-Python' 카테고리의 다른 글
| Programmers / 숫자 카드 나누기 / Python (0) | 2025.03.27 |
|---|---|
| Programmers / 전력망을 둘로 나누기 / Python (0) | 2025.03.26 |
| Programmers / 스티커 모으기(2) / Python (1) | 2025.03.13 |
| Programmers / 시소 짝꿍 / Python (2) | 2025.03.12 |
| Programmers/ [PCCP 모의고사 #1] 2번 - 체육대회 / Python (0) | 2025.02.28 |