문제 (구현)
문제 풀이
0초 부터 손님이 마지막으로 입장할 시간의 초까지 for문으로 돌리면서 계산하였다.
i초 동안 반복하면서 1. 음료가 만들어지는 경우 / 2. 손님이 들어오는 경우 두 가지를 처리하면서 현재 인원을 계산했다.
여기서 내가 실수했던 부분은 음료가 다 만들어져서 사람이 나가자마자 바로 다음 음료를 만드는 것으로 구현했는데, 사람이 한 명 더 들어오기 전에 음료 제조가 끝나는 경우도 생각을 해주어야 했다.
그래서 처음에 몇몇 테스트케이스가 맞지않아서 해당 질문 목록에 있는 반례 예시로 다시 구현하니 바로 성공하였다.
반례 : menu = {5,6,7,11}, order = {1,2,3,3,2,1,1}, k = 10
구현은 별다른 알고리즘이 쓰이지 않아서 쉽긴 하지만 다양한 경우의 수를 생각하는 힘을 길러야 겠다고 생각했다ㅠ
하나의 예시만 보고서 구현하면 큰일난다 ..
소스 코드
class Solution {
public int solution(int[] menu, int[] order, int k) {
int max = 1, people = order.length;
int curPeople = 1; //현재 카페에 있는 인원
int orderIndex = 0 //주문하는 사람 인덱스
int enterIndex = 1; //사람 들어오는 시간 카운트 인덱스
int beverage = menu[order[orderIndex++]]; //음료제조시간
for(int i = 0; i <= (people-1) * k; i++) {
//음료 다 만들었을 경우
if(orderIndex < people && i == beverage) {
curPeople--;
//다음사람이 들어올 시간보다 현재시간이 더 빠르면서 지금 아무 사람도 없을때
if(curPeople == 0 && i < k * enterIndex)
beverage = (k * enterIndex) + menu[order[orderIndex++]];
else
beverage = i + menu[order[orderIndex++]];
}
//손님 들어올 시간
if(i == k * enterIndex) {
curPeople++;
enterIndex++;
max = Math.max(max, curPeople);
}
}
return max;
}
}
'Algorithm > Programmers' 카테고리의 다른 글
[PCCP모의고사2] 2번 신입사원 교육 JAVA (0) | 2024.02.19 |
---|---|
[PCCP모의고사2] 1번 실습용 로봇 JAVA (1) | 2024.02.17 |
[프로그래머스] 행렬 테두리 회전하기 자바 (1) | 2022.10.05 |
[프로그래머스] 보석 쇼핑 자바 (0) | 2022.04.25 |
[프로그래머스] 자물쇠와 열쇠 자바 (0) | 2022.03.08 |