넘치게 채우기

[LeetCode] 1652. Defuse the Bomb 본문

PS/LeetCode

[LeetCode] 1652. Defuse the Bomb

riveroverflow 2024. 11. 18. 09:10
728x90
반응형

https://leetcode.com/problems/defuse-the-bomb/description/?envType=daily-question&envId=2024-11-18

leetcode - Defuse the Bomb

문제 유형: 구현

문제 난이도: Easy

 

문제

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!

 

당신은 해체해야 할 폭탄을 가지고 있다.

당신은 n길이짜리 원형 배열 code와 정수 key k를 가지고 있다.

코드를 해독하기 위해, 당신은 숫자를 대치해야 한다.

  • 만약 k > 0이라면, i번째 번호를 다음 k개의 번호의 합으로 대체하시오.
  • k < 0이라면, i번째 번호를 이전 k개의 번호의 합으로 대체하시오.
  • k == 0이라면, 모두 0으로 채우시오.

해독된 코드를 반환하시오!

 

풀이

단순한 모듈러 연산을 이용해주면 된다.

만약 k가 0이라면, n개짜리 배열에 0을담아 반환한다.

k가 양수라면, 앞의 k개의 숫자를 더해서 ans[i]에 저장한다. 이를 순차적으로 해준다.

k가 음수라면, |k|개의 뒤의 숫자를 더해서 ans[i]에 저장한다.

모듈러를 고려해서, n을 더하고 모듈러 n을 해주자.

 

최종 복호화 코드를 반환하자.

 

코드

C++

class Solution {
public:
    vector<int> decrypt(vector<int>& code, int k) {
        int n = code.size();
        vector<int> ans(n, 0);
        if(k == 0) return ans;

        if(k > 0) {
            for(int i = 0; i < n; ++i) {
                int x = 0;
                for(int j = 1; j <= k; ++j) {
                    x += code[(i + j + n) % n];
                }
                ans[i] = x;
            }
        } else {
            k *= -1;
            for(int i = 0; i < n; ++i) {
                int x = 0;
                for(int j = 1; j <= k; ++j) {
                    x += code[(i - j + n) % n];
                }
                ans[i] = x;
            }
        }

        return ans;
    }
};
728x90
반응형