알고리즘

[프로그래머스 LV.2] - 2025 프로그래머스 코드챌린지 2차 예선 - 서버 증설 횟수

swanzzz 2025. 3. 12. 21:07
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/340199

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 


우선 문제부터 정의해 보겠습니다.

 

0시간 부터 23시간 까지 게임을 운영하는데 해당 게임에 접속하는 유저의 수를 players 배열에 담아 각 시간별로 넘겨줍니다.

 

게임을 운영하기 위해서는 서버가 필요한데 서버 1대에 수용가능한 인원을 총 m명 입니다.

 

또한 서버의 지속 가능한 운영 시간은 k시간 입니다.

 

이제 players 배열에 입력된 사람 수 만큼 서버를 증설하며 운영해야 합니다.

 

문제를 해결하기 위한 조건식을 세워보겠습니다.

 

1. 게임 운영에 필요한 서버의 수는 players[i] // m

 

2. 서버 증설 횟수를 answer 에 저장

 

3. 서버가 증설 되면 현재 시간을 기준으로 총 k 시간 동안 운영하는데 그 시간 동안 서버에 접속한 사람이 또 m 명이상으로 넘어가면 서버를 추가 증설

 

이를 코드로 작성해 보겠습니다.

 

def solution(players, m, k):
    server = [0] * 24 
    answer = 0 
    
    for i in range(24):
        p = players[i] // m # 필요한 서버의 수
        
        if p > server[i]: # 필요한 서버의 수가 증설된 서버의 수보다 크면
            temp = p - server[i] # 증설 횟수
            answer += temp
            
            if i + k < 24: # k시간동안 켜두기
                for j in range(i, i + k):
                    server[j] += temp
            else:
                for j in range(i, 24):
                    server[j] += temp
    
    return answer

 

우선 서버를 0이 24개 존재하는 배열 형식으로 생성해 주었습니다.

24시간동안 게임이 운영되는데 필요한 서버수를 시간대별로 계산하기 위함입니다.

 

총 24시간동안 접속자를 구하며 필요한 서버의 대수를 계산합니다.

 

만약 현재 증설된 서버의 수보다 추가로 서버가 필요한 경우 k시간동안 운영되던 기존의 서버에 새로 증설한 서버의 갯수를 더해줍니다.

 

동시에 정답에도 서버의 증설 횟수를 늘려줍니다.

 

현재 시간을 기준으로 서버의 증설 횟수를 파악하고 24시간 동안 추가 증설 여부를 확인해 주어야 합니다.

여기서 중요한 점은 k 시간의 범위가 24를 넘어가는 경우 입니다.

 

24를 넘어가는 경우 배열 탐색 에러가 발생하니 예외 조건으로 처리해 주었습니다.

 

또한 서버가 운영되던 시간에 추가 증설이 발생할 경우 현재 운영 시간을 기준으로 새로운 서버 횟수를 더해주어야 앞선 조건들을 완벽하게 만족하며 정답을 구할 수 있습니다.

 


 

[결과]

반응형