본문 바로가기

LeetCode

[LeetCode] - 3099. Harshad Number

LeetCode는 프로그래밍 문제를 풀며 코딩 실력을 향상할 수 있는 온라인 플랫폼입니다. 다양한 알고리즘 및 데이터 구조 문제를 제공하며, 면접 대비에 유용합니다. 해당 문제는, LeetCode Problems에서 볼 수 있는 난이도 '쉬움 (Easy)' 단계인 "Harshad Number" 문제입니다.

--> https://leetcode.com/problems/harshad-number/description/

 

문제 : 

An integer divisible by the sum of its digits is said to be a Harshad number.

You are given an integer x. Return the sum of the digits of x if x is a Harshad number, otherwise, return -1.


Example 1 :

Input : x = 18

Output : 9

Explanation : The sum of digits of x is 9. 18 is divisible by 9. So 18 is a Harshad number and the answer is 9.

 

Example 2 :

Input : x = 23

Output : -1

Explanation : The sum of digits of x is 5. 23 is not divisible by 5. So 23 is not a Harshad number and the answer is -1.

 

Constraints : 1 <= x <= 100


이 문제에서 Harshad 숫자는 자신의 자릿수 합으로 나누어지는 숫자를 말합니다. 주어진 정수 x가 Harshad 숫자라면, 자릿수의 합을 반환하고, 그렇지 않다면 -1을 반환합니다. 예를 들어, 입력이 18이면 자릿수 합은 9이고 18은 9로 나누어지므로 9를 반환합니다.

class Solution {
    public int sumOfTheDigitsOfHarshadNumber(int x) {
        int sumOfDig = 0;
        int x2 = 0;
        int res = x;
        while (x != 0) {
            x2 = x;
            x2 = x2 % 10;
            sumOfDig = sumOfDig + x2;
            x = x / 10;
        }
        if (res % sumOfDig == 0) {
            return sumOfDig;
        } else {
            return -1;
        }
    }
}

 

코드 설명 들어갑니다 :

 

  1. 자리수 합 계산 :
    • while 루프를 사용하여 각 자릿수를 추출하고 합계에 더합니다.
    • x를 10으로 나누어 자리수를 줄입니다.
  2. Harshad 숫자 확인 및 결과 반환 :
    • 원래 x 값을 저장한 res를 사용하여 자릿수 합 sumOfDig로 나누어지는지 확인합니다.
    • 나누어지면 sumOfDig를 반환하고, 그렇지 않으면 -1을 반환합니다.

시간 및 공간 복잡도 :

  1. 시간 복잡도 :
    • O(d) : 자릿수 합을 계산하는 루프는 x의 자리수에 비례하여 실행됩니다. 여기서 d는 x의 자리수입니다.
    • 주어진 문제의 범위 내에서 d는 최대 3입니다(1 <= x <= 100).
  2. 공간 복잡도 :
    • O(1) : 추가적인 배열이나 리스트를 사용하지 않고, 상수 개수의 변수만 사용하므로 공간 복잡도는 O(1)입니다.

이 코드는 주어진 정수가 Harshad 숫자인지 확인하고, 해당하는 경우 자리수 합을 반환하는 문제를 효율적으로 해결합니다. 각 자릿수를 더하여 확인한 후, Harshad 숫자 여부를 판단합니다.


코드 Runtime 결과