PS/문제 풀이
[프로그래머스/Swift] 389479번 - 서버 증설 횟수
시르베어
2025. 3. 28. 10:27
🔗 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/389479?language=swift
💡 구현 아이디어
- 증설 이용시간 확인 - 종료된 서버가 있는지
- 최대 이용가능 사용자 수 확인
- 이용가능 수 > 사용자 수 ⇒ 문제 없음
- 이용가능 수 ≤ 사용자 수 ⇒ 서버증설, 결과 저장
- 결과 반환
💻 코드
// 시간대의 유저수, 한서버의 유저수, 서버의 유지시간
func solution(_ players:[Int], _ m:Int, _ k:Int) -> Int {
var result1: Int = 0 // 서버 증설 횟수
var servers: [(Int, Int)] = [] // (서버가 종료되는 시간, 서버 개수)
for H in 0..<24 {
// 이용시간이 종료된 서버가 있는지 확인
for (idx, server) in servers.enumerated() {
if server.0 == H { // 이번에 종료됨
servers.removeFirst() // 종료는 앞에서 부터 종료됨
}
}
// 최대 이용가능한 유저 수 (기본 한개 + 추가 서버)
var maxUsers: Int = m
for server in servers {
maxUsers += server.1 * m
}
// 서버 증설이 필요
if players[H] >= maxUsers {
// maxUsers 미만까지 입장가능 : 남은 유저수 = 전체 - (max-1)
let leftUsers: Int = players[H] - (maxUsers-1)
// 서버 증설
if leftUsers % m == 0 {
result1 += leftUsers / m
servers.append((H+k, leftUsers/m))
} else {
result1 += leftUsers / m + 1
servers.append((H+k, leftUsers/m+1))
}
}
}
return result1
}
❌ 틀린 이유 및 틀린 부분
- 제출 했더니 런타임 에러가 떴다 - 아무리 찾아도 문제가 없어 다시 제출했더니 통과했다, 시스템 오류 였던듯하다
⏳ 시간 복잡도
- 최대 24(시간) * 24(서버증설한시간)
- O(n^2)