Leetcode Java Defuse the Bomb

업데이트:

문제

Link

코드

class Solution {

  public int[] decrypt(int[] code, int k) {
    if (k == 0) {
      return new int[code.length];
    }
    int length = code.length;
    int start = 1;
    int end = k;
    if (k < 0) {
      start = length + k;
      end = length - 1;
    }
    int sum = 0;
    for (int i = start; i <= end; i++) {
      sum += code[i];
    }
    int[] result = new int[length];
    for (int i = 0; i < length; i++) {
      result[i] = sum;
      sum -= code[start++ % length] - code[++end % length];
    }
    return result;
  }

}

결과

Link

설명

  1. code에서 아래의 규칙대로 합계를 각 위치에서 계산하여 반환하는 문제이다.
    • k가 0보다 큰 경우, 현재 값의 위치에서 다음 k개 숫자의 합을 넣는다.
    • k가 0보다 작은 경우, 현재 값의 위치에서 이전 k개 숫자의 합을 넣는다. (여기서 k는 절댓값 k이다.)
    • k가 0인 경우, 모든 위치의 값은 0이다.
  2. k가 0인 경우, code 길이의 정수 배열을 정의하여 주어진 문제의 결과로 반환한다.

  3. 문제 풀이에 필요한 변수를 정의한다.
    • length는 code의 길이를 저장한 변수이다.
    • start와 end는 시작 위치와 종료 위치를 저장할 변수로, 아래의 경우에 따라 값을 넣어준다.
      • k가 0보다 큰 경우, start에 1과 end에 k를 넣어준다.
      • k가 0보다 작은 경우, start에 $length + k$와 end에 $length - 1$을 넣어준다.
    • sum은 위치에 따라 k개 값의 합을 저장할 변수로, start부터 end까지 code 내 값의 합을 넣어준다.
    • result는 결과를 저장할 변수로, length 크기의 정수 배열로 초기화한다.
  4. 0부터 length 미만까지 i를 증가시키면서 아래를 수행한다.
    • result[i]의 위치에 사전 계산된 sum을 먼저 넣어준다.
    • sum에 code에서 start를 length로 나눈 나머지 값의 위치에 해당하는 값을 뺀 후 start를 증가시키고, end를 증가시킨 후 length 나눈 나머지 값의 위치에 해당하는 값을 더해준다.
  5. 반복이 완료되면 각 위치별 조건에 해당하는 결과가 저장된 result를 주어진 문제의 결과로 반환한다.

소스

Sample Code는 여기에서 확인 가능합니다.

댓글남기기