-
[프로그래머스] 서버증설횟수 자바코딩테스트 2025. 4. 10. 09:38반응형
https://school.programmers.co.kr/learn/courses/30/lessons/389479
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제
players : 0시 ~ 24시까지 시간대별 사용자 수
m : 서버증설 기준 . player >= m 일 경우 서버 증설 필요.
k : 증설한 서버 유지 시간. k시간 경과 후 반납
시간대별 플레이어 수를 토대로 하루 중 총 증설한 서버 댓수를 구하시오.
접근
players 와 동일한 길이의 int배열 addedServer를 하나 만든 후 증설한 서버댓수정보를 기록한다.
k시간만큼 유지되므로 증설시작 ~ k시간만큼 addedServer에 서버댓수정보 저장하며 answer도 집계public int solutionOld(int[] players, int m, int k) { int answer = 0; int[] addedServer = new int[players.length]; for(int i = 0; i < players.length; i ++){ int player = players[i]; int add = (player - (m * addedServer[i])) / m; if(player >= m && addedServer[i] <= add){ int endTime = Math.min(i + k, players.length - 1); for(int j = i; j < endTime; j++){ addedServer[j] += add; } if(i == players.length -1) { addedServer[i] += add; } answer += add; } } return answer; }
발견된 문제
1. 서버증설 기준이 모호하여 특정 케이스에서 누락될 가능성이 있음.
2. endTime 계산 방식이 비효율적임.수정
1. 증설여부를 판단하는 부분 명확하게 정리.
2. 서버추가정보의 endTime부분 간략화.public int solution(int[] players, int m, int k) { int answer = 0; int[] addedServer = new int[players.length]; for(int i = 0; i < players.length; i ++){ int player = players[i]; boolean needAdd = m * addedServer[i] < player; if(needAdd){ int add = (player - (m * addedServer[i])) / m; for(int j = i; j < Math.min(i + k, players.length); j++){ addedServer[j] += add; } answer += add; } } return answer; }
반응형'코딩테스트' 카테고리의 다른 글
[프로그래머스] 암호해독 자바 조합 (2) 2025.04.11 [프로그래머스] 지게차와 크레인 자바 BFS (0) 2025.04.10 [프로그래머스] 완전범죄 자바 DP 방식 (0) 2025.04.09 [프로그래머스] 폰켓몬 자바 Set (0) 2025.04.08 [프로그래머스] 2016년 자바 요일구하기 LocalDate getDayOfWeek (0) 2025.04.08