문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
우리의 영웅 티모가 적 애쉬에게 독 공격을 하고 있다! 티모가 애쉬를 공격하면 애쉬는 정확히 duration초 동안 독에 걸린다. 더 정확히 말하면, t초에 공격이 발생하면 애쉬는 [t, t + duration - 1] 시간 동안 독에 걸린다. 티모가 독 효과가 끝나기 전에 다시 공격하면 독 효과 타이머가 초기화되고, 새로운 곡격 후 duration초 후에 독 효과가 사라진다.
주어진 것은 티모가 timeSeries[i]초에 애쉬를 공격한 시점을 나타내는 비감소 정수 배열 timeSeries와 정수 duration이다.
애쉬가 독에 걸린 총 시간을 초 단위로 반환해라.
#1
Input: timeSeries = [1, 4], duration = 2
Output: 4
Explanation: 티모가 애쉬를 공격하는 방식은 다음과 같다.
- 1초에 티모가 공격하고, 애쉬는 1초와 2초 동안 독에 걸린다.
- 4초에 티모가 공격하고, 애쉬는 4초와 5초 동안 독에 걸린다.
따라서 애쉬는 1초, 2초, 4초, 5초, 총 4초동안 독에 걸린다.
#2
Input: timeseries = [1, 2], duration = 2
Output: 3
Explanation: 티모가 애쉬를 공격하는 방식은 다음과 같다.
- 1초에 티모가 공격하고, 애쉬는 1초와 2초 동안 독에 걸린다.
- 하지만 2초가 되면 티모가 다시 공격하여 독 타이머가 초기화된다. 애쉬는 2초와 3초 동안 독에 걸린다.
따라서 애쉬는 1초, 2초, 3초, 총 3초동안 독에 걸린다.
class Solution {
public int findPoisonedDuration(int[] timeSeries, int duration) {
if(timeSeries.length == 0 || duration == 0) return 0;
int cnt = duration;
for(int i = 1; i < timeSeries.length; i++){
cnt += Math.min(timeSeries[i] - timeSeries[i - 1], duration);
}
return cnt;
}
}