hyelie
hyelie
Hyeil Jeong
       
글쓰기    관리    수식입력
  • 전체보기 (495)
    • PS (283)
      • Algorithm (28)
      • PS Log (244)
      • Contest (6)
      • Tips (5)
    • Development (52)
      • Java (14)
      • Spring (23)
      • SQL (2)
      • Node.js (2)
      • Socket.io (3)
      • Study (4)
      • Utils (4)
    • DevOps (36)
      • Git (5)
      • Docker (4)
      • Kubernetes (2)
      • GCP (3)
      • Environment Set Up (8)
      • Tutorial (12)
      • Figma (2)
    • CS (74)
      • OOP (7)
      • OS (24)
      • DB (2)
      • Network (24)
      • Architecture (0)
      • Security (2)
      • Software Design (0)
      • Parallel Computing (15)
    • Project (15)
      • Project N2T (5)
      • Project ASG (0)
      • Project Meerkat (1)
      • Model Checking (7)
      • Ideas (2)
    • 내가 하고싶은 것! (34)
      • Plan (16)
      • Software Maestro (10)
      • 취준 (8)
hELLO · Designed By 정상우.
hyelie

hyelie

PS/PS Log

23.04.26. 풀었던 문제들

Leetcode 258. Add Digits

어떤 수 n이 있을 때 n의 자리수를 모두 합쳐 n을 만든다. n이 한 자리가 될때까지 이것을 반복하는 문제.

 

첫 번째 접근

 trivial하게 단순 구현으로 접근. 

// Runtime 0 ms Beats 100%
// Memory 5.9 MB Beats 63.10%

class Solution {
public:
    int addDigits(int num) {
        while(num >= 10){
            int temp = 0;
            while(num){
                temp += num % 10;
                num /= 10;
            }
            num = temp;
        }
        return num;
    }
};

 

시간복잡도

 n이 INT_MAX면 $2^32$, 약 21억이다. 그러나 21억의 모든 자리수를 합쳐도 약 180정도로 3자리로 줄게 된다. 따라서 O(logn)이라 볼 수 있다.

 

공간복잡도

 추가 공간을 사용하지 않음. 상수만 사용한다. O(1).

 

 

두 번째 접근

 follow-up으로 반복문이나 재귀 없이 O(1)로 풀 수 있는 방법을 제시한다. 

 일단 최종적인 정답 x는 0 <= x <= 9이다. 그야 한 자리수니까 당연하다.

 그렇다면 생각을 해 봤을 때, 1부터 쭉 숫자를 나열해 보고 이것들의 정답을 유추해 보자

  • 1 - 1
  • 2 - 2
  • ...
  • 9 - 9
  • 10 - 1
  • 11 - 2
  • ...
  • 18 - 9
  • 19 - 10 - 1
  • 20 - 2
  • ...
  • 27 - 9
  • 28 - 10 - 1
  • ...

 이렇게, 9의 배수마다 수가 반복되는 것을 알 수 있다. 3자리 수로 넘어가도 동일하다.

// Runtime 7 ms Beats 16.24%
// Memory 6 MB Beats 63.10%

class Solution {
public:
    int addDigits(int num) {
        if(num == 0) return 0;
        return num % 9 == 0 ? 9 : num % 9;
    }
};

 

시간복잡도 & 공간복잡도

 자명하게 O(1)

 

 

후기

 이걸 digital root라고 한다. wikipedia 링크를 걸겠다.

 

 

 

 

 

저작자표시

'PS > PS Log' 카테고리의 다른 글

23.04.28. 풀었던 문제들  (0) 2023.04.28
23.04.27. 풀었던 문제들  (0) 2023.04.27
23.04.25. 풀었던 문제들  (0) 2023.04.25
23.04.24. 풀었던 문제들  (0) 2023.04.24
23.04.23. 풀었던 문제들  (0) 2023.04.23
    hyelie
    hyelie

    티스토리툴바