TIL
[코테연습] 1652. Defuse the Bomb
크라00
2024. 11. 18. 10:51
문제타입
https://leetcode.com/problems/defuse-the-bomb/?envType=daily-question&envId=2024-11-18
Array
Sliding Window
문제분석
이 문제는 암호화된 배열을 복호화하는 문제입니다. 주어진 배열을 특정 규칙에 따라 복호화하여 새로운 배열을 반환하는 문제입니다.
- 입력 배열 code: 정수 배열이며, 암호화된 데이터를 나타냅니다.
- k: 정수로, 복호화 방식이 결정됩니다.
- k > 0일 때: k개의 인덱스를 시계방향으로 더한 값으로 새로운 배열을 만듭니다.
- k < 0일 때: |k|개의 인덱스를 반시계방향으로 더한 값으로 새로운 배열을 만듭니다.
- k == 0일 때: 모든 값은 0으로 설정된 배열을 반환합니다.
핵심 조건:
- k > 0: k만큼 시계방향으로 code 배열에서 값을 더해서 새로운 배열을 생성합니다.
- k < 0: |k|만큼 반시계방향으로 code 배열에서 값을 더합니다.
- k == 0: 결과 배열은 모두 0으로 채워집니다.
문제풀이
- 배열 초기화:
- 주어진 배열 code의 길이 n을 계산하고, 결과 배열 arr를 0으로 초기화합니다.
- k == 0일 경우, 결과 배열 arr는 그대로 반환됩니다.
- 시계방향(k > 0):
- start_idx를 1로 설정하여 시계방향으로 진행합니다.
- 각 인덱스에 대해, start_idx + i부터 abs(k) + start_idx + i까지 값을 더해 결과 배열 arr에 저장합니다.
- 인덱스가 배열을 벗어날 경우 모듈러 연산(% n)을 사용하여 원형 배열처럼 동작하도록 처리합니다.
- 반시계방향(k < 0):
- start_idx를 -1로 설정하여 반시계방향으로 진행합니다.
- abs(k)만큼 반시계방향으로 더하는 방식입니다.
- arr 배열을 temp 배열로 복사한 뒤, 반시계방향으로 필요한 만큼 값을 이동시킵니다. 이때 temp 배열에 값을 할당하는 방식으로 인덱스 재배치를 합니다.
- 결과 반환:
- 모든 계산이 끝난 후, 복호화된 결과 배열 arr를 반환합니다.
> java
class Solution {
public int[] decrypt(int[] code, int k) {
int n = code.length;
int[] arr = new int[n];
if (k == 0) {
Arrays.fill(arr, 0);
return arr;
}
int startIdx = 1;
for (int i = 0; i < n; i++) {
int sum = 0;
for (int j = startIdx+i; j < Math.abs(k) + startIdx+i; j++) {
int idx = j % n;
sum += code[idx];
}
arr[i] = sum;
}
// arr.length-1, arr.length-2, arr.length-3, (n-1 - Math.abs(k))
if (k < 0) {
int[] temp = new int[n];
//11 -> 4 = 11-4=7, 7~11, 0~6
int idx = 0;
for (int i = n-Math.abs(k)-1; i < n; i++) {
temp[idx++] = arr[i];
}
for (int i = 0; i < n-Math.abs(k)-1; i++) {
temp[idx++] = arr[i];
}
arr = temp;
}
return arr;
}
}
> python
class Solution:
def decrypt(self, code: List[int], k: int) -> List[int]:
n = len(code)
arr = [0] * n
if k == 0 : return arr
start_idx = 1
for i in range(n) :
total = 0
for j in range(start_idx+i,abs(k)+start_idx+i) :
idx = j % n
total += code[idx]
arr[i] = total
if k < 0 :
temp = [0] * n
idx = 0
for i in range(n-abs(k)-1, n) :
temp[idx] = arr[i]
idx+=1
for i in range(n-abs(k)-1) :
temp[idx] = arr[i]
idx+=1
arr = temp
return arr