알고리즘/문제풀이
[leetcode] 1652. Defuse the Bomb
Jㅐ둥이
2024. 11. 19. 00:55
반응형
안녕하세요. 오늘은 leetcode의 1652. Defuse the Bomb 문제를 풀어봤습니다.
1. 문제
이 문제에서는 수열 code와 하나의 수 k가 주어지고, k의 값에 따라서 수열을 반환해야 합니다.
- k > 0 일 때, i번째에 code의 i+1, i+2, ..., i+k번째 수들의 합을 가지는 수열을 반환합니다.
- k < 0 일 때, i번째에 code의 i+k, i+k-1, ..., i -1번째 수들의 합을 가지는 수열을 반환합니다.
- k = 0 일 때, 길이가 code와 동일한 0으로 이루어진 수열을 반환합니다.
- i+k가 code의 길이보다 커지면 처음부터 시작합니다.
- i+k가 code의 길이보다 작아지면 맨 뒤부터 시작합니다.
예시)
- code=[1, 2, 3, 4, 5], k=3
- [2+3+4, 3+4+5, 4+5+1, 5+1+2, 1+2+3] => [9, 12, 10, 8, 6]
- code=[1, 2, 3, 4, 5], k=-3
- [3+4+5, 4+5+1, 5+1+2, 1+2+3, 2+3+4] => [12, 10, 8, 6, 9]
- code=[1, 2, 3, 4, 5], k=0
- [0, 0, 0, 0, 0]
2. 풀이
이번 문제는 사실 주어진 조건대로 구현하기만 하면 되는 문제입니다.
다만 신경 쓰면 좋을 부분은 k개의 합을 구할 때 매번 구하지 않고,
이전에 구한 합에서 맨 앞의 숫자를 빼고 뒤의 숫자만 더해가는 것입니다.
이렇게 하니 runtime 효율성은 확실히 챙겨지더라고요!
+ 코드
더보기
class Solution:
def decrypt(self, code: List[int], k: int) -> List[int]:
result = []
if k > 0:
s = sum(code[:k])
for i in range(len(code)):
s = s - code[i] + code[(i+k)%len(code)]
result.append(s)
elif k < 0:
s = sum(code[k-1:-1])
for i in range(len(code)):
s = s + code[i-1] - code[(i+k-1)%len(code)]
result.append(s)
else:
result = [0] * len(code)
return result
반응형