문제
https://school.programmers.co.kr/learn/courses/30/lessons/389479
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
입출력

해설
서버가 총 몇 번이 증설이 됐는지 체크하는 문제이다.
해당 문제는 전형적인 시뮬레이션 문제로 단순히 '언제' 서버가 증설됐는지 기억을 하고 구해주면된다.
서버가 언제 투입이 됐는지는 players 리스트를 통하여 시간값(index)을 추가적으로 넣어주면 된다.
현재 몇 명이 서버에 있는지가 나와있으니 player // m으로 나누게 되면 서버가 몇 개가 있어야 하는지 알 수 있다.
고로 for문을 돌면서 현재 서버의 개수와 있어야 하는 서버 개수의 차를 통해서 몇 개가 증설됐는지 체크할 수 있다.
정답코드
더보기
'''
'25. 12. 13.(토)
1. m명이 늘어날 때마다 서버 1대가 추가 설치
2. 한 번 증설된 서버는 k시간만 운영하고 이후에는 반납한다.
k = 5
10 ~ 15이다.
단순 시뮬레이션 문제같아 보임.
1. 게임
1. 증설 횟수
2. 현재 시간
3. 이용자 수
4. 현재 증설된 서버 수
2. 플레이어
1. 어느 서버
2. 언제 투입
'''
class player:
def __init__(self, server: int, into: int):
self.server = server
self.into = into
from collections import deque
def solution(players: list, m: int, k: int):
# 플레이어들이 각각 언제 들어왔는지 알 수 있음.
# 시간순서대로 언제 증설됐는지 기억(서버 당)
answer = 0
player_list = []
now_server = deque()#증설된 서버 k시간만 열려있을 수 있음.
#index + k에는 나와야함.
for idx, now_player in enumerate(players):
while now_server and now_server[0] + k <= idx:
pre_idx = now_server.popleft()
#print(pre_idx, "서버", idx, "에 날라감")
# idx ~ idx + 1 시간 대에 now_player만큼 있음.
required_server = now_player // m #필요한 서버 수
now_number_server = len(now_server)
#서버 증설해야 됨.
if required_server > now_number_server:
gap = required_server - now_number_server
#print(idx, "에 서버", gap, "만큼 추가됨.")
for _ in range(gap):
now_server.append(idx)
answer += gap
return answer
깃허브 : https://buly.kr/9XMPGlz
'코딩테스트 > programmers' 카테고리의 다른 글
| 프로그래머스 / 정수론 / 소수 찾기 (0) | 2025.12.22 |
|---|---|
| 프로그래머스 / 다익스트라 / 배달 (0) | 2025.12.22 |
| 프로그래머스 / 수학, 정수론 / 숫자 카드 나누기 (0) | 2025.12.11 |
| 프로그래머스 / BFS / 미로 탈출 (0) | 2025.12.09 |
| 프로그래머스 / 구현 / 삼각 달팽이 (0) | 2025.11.30 |