Leetcode Java Minimum Penalty for a Shop
업데이트:
문제
코드
class Solution {
public int bestClosingTime(String customers) {
int max = 0;
int score = 0;
int time = -1;
for (int i = 0; i < customers.length(); i++) {
if (customers.charAt(i) == 'Y') {
score++;
} else {
score--;
}
if (score > max) {
max = score;
time = i;
}
}
return time + 1;
}
}
결과
설명
- ‘Y’와 ‘N’로 이루어진 고객 방문 기록인 customers를 이용하여 최소 벌금을 부과하기 위해 가장 빨리 폐점하는 시간을 반환하는 문제이다.
- i번째 문자가 ‘Y’인 경우, 고객이 i번째 시간에 도착한다는 의미이다.
- i번째 문자가 ‘N’인 경우, 고객이 i번째 시간에 오지 않는다는 의미를 나타낸다.
- 0 <= j <= n인 j 시간에 상점이 닫을 때 까지 아래와 같이 벌금이 부과된다.
- 매장이 문을 열고 손님이 오는 경우.
- 매장이 문을 닫고 손님이 오는 경우.
- 문제 풀이에 필요한 변수를 정의한다.
- max는 최대 값을 저장할 변수로, 0으로 초기화한다.
- score는 벌금을 저장할 변수로, 0으로 초기화한다.
- time은 가장 빨리 폐점하는 시간을 저장할 변수로, -1로 초기화한다.
- 0부터 customers의 길이 미만까지 i를 증가시키며 아래를 반복한다.
- customers의 i번째 값이 ‘Y’인 경우, 벌금을 부과하지 않았으므로 score를 증가시키고 아니면 score를 감소시켜 벌금을 부과한다.
- score가 max보다 큰 경우, max에 최대 값을 저장하고 time에 현재까지 영업한 시간인 i를 넣어준다.
- 반복이 완료되면 최소 벌금을 부과하는 시간인 $time + 1$을 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기