본문 바로가기

LeetCode/Interval

[Easy] 495. Teemo Attacking

#문제 설명

Leetcode 495번은 리그 오브 레전드 캐릭터인 티모를 알고 있으면 이해하기 쉽다. 티모의 e 스킬은 티모가 상대 챔피언에게 평타를 때리면 평타를 때리면, 4초간 독 데미지를 상대에게 입힌다. 이 문제에서는 티모가 e스킬은 찍은 상태에서, 상대에게 평타를 치는 시간을 담은 배열과, 독 데미지의 지속시간이 주어진다 (실제 게임에서는 4초로 고정이지만).

 

또 한 가지 알아야 할것은 티모가 이미 독 데미지를 입은 상태의 상대에게 평타를 입힌다면, 독 데미지의 지속 시간은 리셋되고 상대는 다시 4초간 독데미지를 입어야한다. 예를 들어 티모가 2분40초에 평타를 입히고, 다시 2분 42초에 평타를 때리면 상대의 독데미지는 2분 46초에 끝날것이다. 이 문제는 주어진 배열과 독 데미지 지속 시간을 활용하여, 상대 챔피언이 독데미지를 입은 총 시간을 return하는 문제이다.

위에 주어진 2번 예시를 보자. [1,2] 의 배열이 주어지고, 지속시간은 2가 주어졌다. 그렇다면 1초에 티모가 평타를 때리고, 독 데미지는 1, 2초 까지 지속된다, 하지만 티모가 2초에 한번더 평타를 때리므로, 타이머가 리셋되고 2초부터 3초까지 다시 독데미지가 지속된다 그렇기 때문에 상대가 독 데미지를 입은 시간은 1,2,3 초이므로, 3을 return 하면된다. 

 

#문제 풀이

풀이 1

class Solution {
     public int findPoisonedDuration(int[] timeSeries, int duration) {

        int begin = timeSeries[0], total = 0;
        for (int i = 0; i < timeSeries.length; i++) {
            int add = 0;
            if(timeSeries[i] < begin + duration){
                add = timeSeries[i] - begin;
            }
            else{
                add = duration;
            }
            total = total + add;
            begin = timeSeries[i];
        }   
        return total + duration;
    } 
}

 

풀이 2

class Solution {
     public int findPoisonedDuration(int[] timeSeries, int duration) {
        int total = 0;
        for (int i = 1; i < timeSeries.length; i++)
                total += Math.min(timeSeries[i] - timeSeries[i - 1], duration);
        return total + duration; 
    } 
}