Leetcode Java Self Dividing Numbers

업데이트:

문제

Link

코드

class Solution {

  public List<Integer> selfDividingNumbers(int left, int right) {
    List<Integer> result = new ArrayList<>();
    for (int idx = left; idx <= right; idx++) {
      int num = idx;
      boolean valid = true;
      while (num > 0) {
        int remain = num % 10;
        if (remain == 0 || idx % remain != 0) {
          valid = false;
          break;
        }
        num /= 10;
      }
      if (valid) {
        result.add(idx);
      }
    }
    return result;
  }

}

결과

Link

설명

  1. [left, right] 구간 내 각 자릿수에 해당하는 값들로 해당 숫자를 나누었을 때 나머지가 모두 0이 되는 자기 나눗셈 숫자를 구하는 문제이다.

  2. 결과를 넣을 result를 ArrayList로 초기화한다.

  3. left부터 right까지 idx를 증가시키며 아래를 반복한다.
    • num에 idx를 넣어주고, 자기 나눗셈 숫자를 검증한 결과를 넣기 위한 valid를 true로 초기화한다.
    • num이 0 초과일 때 까지 remain에 num을 10으로 나눈 나머지 값을 넣고 자기 나눗셈 숫자가 될 수 없으므로 valid를 false로 넣고 반복을 중지하고, 아니면 num에 10으로 나눈 값을 넣어 반복을 계속한다.
      • num을 10으로 나눈 나머지가 0인 경우 나눗셈을 진행할 수 없다.
      • idx를 remain으로 나눈 나머지가 0이 아닌 경우 만족하지 않는다.
    • 위의 반복이 완료되고 valid가 true이면 idx는 자기 나눗셈 숫자이므로, result에 idx를 넣어준다.
  4. 반복이 완료되면 [left, right] 구간 내 존재하는 자기 나눗셈 숫자를 넣은 result를 주어진 문제의 결과로 반환한다.

소스

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

댓글남기기