일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 이진탐색
- 프로그래머스
- 코딩테스트
- programmers
- 딕셔너리
- 분산처리
- Hadoop
- 아파치 하둡
- leetcode
- 스파크
- heapq
- 우선순위큐
- 티스토리챌린지
- Apache Spark
- Spark
- 분산
- 오블완
- 하둡
- Apache Hadoop
- 파이썬
- 데이터 엔지니어링
- 알고리즘
- 도커
- docker
- Data Engineering
- 빅데이터
- Python
- 리트코드
- 아파치 스파크
- HDFS
- Today
- Total
래원
[LeetCode] 1652. Defuse the Bomb - Python 본문
문제 설명
You have a bomb to defuse, and your time is running out! Your informer will provide you with a circular array code
of length of n
and a key k
.
To decrypt the code, you must replace every number. All the numbers are replaced simultaneously.
- If k > 0, replace the ith number with the sum of the next k numbers.
- If k < 0, replace the ith number with the sum of the previous k numbers.
- If k == 0, replace the ith number with 0.
As code
is circular, the next element of code[n-1]
is code[0]
, and the previous element of code[0]
is code[n-1]
.
Given the circular array code
and an integer key k
, return the decrypted code to defuse the bomb!
문제 예제
Example 1:
Input: code = [5,7,1,4], k = 3
Output: [12,10,16,13]
Explanation: Each number is replaced by the sum of the next 3 numbers. The decrypted code is [7+1+4, 1+4+5, 4+5+7, 5+7+1]. Notice that the numbers wrap around.
Example 2:
Input: code = [1,2,3,4], k = 0
Output: [0,0,0,0]
Explanation: When k is zero, the numbers are replaced by 0.
Example 3:
Input: code = [2,4,9,3], k = -2
Output: [12,5,6,13]
Explanation: The decrypted code is [3+9, 2+3, 4+2, 9+4]. Notice that the numbers wrap around again. If k is negative, the sum is of the previous numbers.
제한 사항
- n == code.length
- 1 <= n <= 100
- 1 <= code[i] <= 100
- -(n - 1) <= k <= n - 1
내 풀이
class Solution:
def decrypt(self, code: List[int], k: int) -> List[int]:
n = len(code)
answer = []
if k == 0:
return [0 for _ in range(n)]
for i in range(n):
idx = i
temp = 0
for _ in range(abs(k)):
if k > 0:
idx += 1
if idx >= n:
idx -= n
else:
idx -= 1
if idx < 0:
idx += n
temp += code[idx]
answer.append(temp)
return answer
k = 0 이면, code의 모든 요소를 0으로 설정하고 return 하면 되어 맨 처음 이를 구현했다.
k > 0 이면, 현재 요소 다음에 오는 k개의 요소를 더한 값을 저장 하면 된다.
예를 들어, Input: code = [5, 7, 1, 4], k = 3 다음과 같이 주어졌을 때,
- 5부터 시작해서 5 다음에 오는 3개의 요소를 더한다. --> 7 + 1 + 4 = 12 이다.
- 다음으로 7로 넘어가고 7 다음으로 오는 3개의 요소의 합은 --> 1 + 4 + 5 = 10 이다.
- 다음으로 1로 넘어가고 1 다음으로 오는 3개의 요소의 합은 --> 4 + 5 + 7 = 16 이다.
- 다음으로 4로 넘어가고 4 다음으로 오는 3개의 요소의 합은 --> 5 + 7 + 1 = 13이다.
- 따라서 result는 [12, 10, 16, 13]
나는 idx 변수를 만들어서 현재 요소의 위치를 저장했고, k번 만큼 +1을 해주어 현재 요소 다음으로 오는 요소들의 값을 구해 더해갔다.
만약 idx가 code의 길이를 넘어가면 code 길이를 빼주어 처음으로 돌아가게끔 구현했다.
k < 0 이면, 현재 요소 이전에 오는 k개의 요소를 더한 값을 저장 하면 된다.
예를들어, Input: code = [5, 7, 1, 4], k = 3 다음과 같이 주어졌을 때,
- 5부터 시작해서 5 이전에 오는 3개의 요소를 더한다. --> 4 + 1 + 7 = 12 이다.
- 다음으로 7로 넘어가고 7 이전에 오는 3개의 요소의 합은 --> 5 + 4 + 1 = 10 이다.
- 다음으로 1로 넘어가고 1 이전에 오는 3개의 요소의 합은 --> 7 + 5 + 4 = 16 이다.
- 다음으로 4로 넘어가고 4 이전에 오는 3개의 요소의 합은 --> 1 + 7 + 5 = 13이다.
- 따라서 result는 [12, 10, 16, 13]
이 조건 역시 idx 변수를 만들어서 현재 요소의 위치를 저장했고, | k |번 만큼 -1 해주어 현재 요소 이전에 오는 요소들의 값을 구해 더해갔다.
만약 idx가 0보다 작아지면 code의 총 길이를 더해 마지막 요소로 돌아가게끔 구현했다.
조건에 맞게 코딩을 하면 돼서 어려운 문제는 아니었다.