dkswnkk 2022. 3. 2. 12:12

문제

https://leetcode.com/problems/add-digits/

 

Add Digits - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

μ½”λ“œ

(1) μž¬κ·€, λ°˜λ³΅λ¬Έμ„ μ‚¬μš©ν•œ 풀이

class Solution {
public:
    int addDigits(int num) {
        int temp1=0, temp2=0, ans=num;
        while(true){
            while(num>9){
                temp1 = num%10;
                temp2 = num/10;
                ans = temp1 + temp2;
                num = ans;
            }
            if(num<10){
                num = ans;
                return num;
            }
        }
        
    }
};

 

(2) 쑰건식을 ν™œμš©ν•˜μ—¬ O(1) μ‹œκ°„ λ³΅μž‘λ„λ‘œ ν•΄κ²°ν•œ 풀이

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

 

풀이

이 λ¬Έμ œλŠ” 2^31- 1κΉŒμ§€ λ“€μ–΄μ˜€λŠ” μžμ—°μˆ˜μ˜ 각 자릿수λ₯Ό ν•œ μžλ¦Ώμˆ˜κ°€ 될 λ•ŒκΉŒμ§€ λ”ν•΄μ„œ 좜λ ₯ν•˜λŠ” λ¬Έμ œμž…λ‹ˆλ‹€. 

μ²˜μŒμ—λŠ” λ°˜λ³΅λ¬Έμ„ ν™œμš©ν•΄μ„œ 각 자릿수λ₯Ό λ–Όμ–΄κ°€λ©° ν’€μ—ˆμ§€λ§Œ λ¬Έμ œμ—μ„œ Follow up: Could you do it without any loop/recursion in O(1) runtime? λΌλŠ” 쑰건을 μ€€ 것을 보면 λ°˜λ³΅λ¬Έμ΄λ‚˜ μž¬κ·€λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  O(1)의 μ‹œκ°„μœΌλ‘œ ν•΄κ²°ν•˜λΌλŠ” λ¬Έμ œμ΄κΈ°μ— μ’€ 더 고민이 ν•„μš”ν–ˆλ˜ λ¬Έμ œμ˜€μŠ΅λ‹ˆλ‹€. 

결과적으둜 O(1)둜 ν•΄κ²°ν•œ 두 번째 풀이λ₯Ό 보면 μ•Œκ² μ§€λ§Œ 9둜 λͺ¨λ“ˆλŸ¬ 연산을 ν–ˆμ„ λ•Œμ˜ 값이 결과적으둜 μš°λ¦¬κ°€ μ›ν•˜λŠ” 값이 됨을 μ•Œ 수 μžˆλŠ”λ° κ·Έ μ΄μœ λŠ” 숫자 9λΌλŠ” 값을 μžμ„Ένžˆ μ‚΄νŽ΄λ³΄λ©΄ μ•„λž˜μ˜ νŠΉμ§•μ„ μ§€λ‹ˆκ³  μžˆμŠ΅λ‹ˆλ‹€.

좜처: μœ„ν‚€ν”Όλ””μ•„

4번째 νŠΉμ§•μ„ 잘 μ‚΄νŽ΄λ³΄λ©΄ 9에 μ–΄λ–€ 수λ₯Ό κ³±ν•˜λ”λΌλ„, λ‚˜μ˜€λŠ” κ°’μ˜ 각 자리 숫자λ₯Ό λͺ¨λ‘ ν•©ν•˜λ©΄ 9의 배수 값이 λ©λ‹ˆλ‹€. 

else if(num%9==0) return 9;

λ”°λΌμ„œ μœ„ μ½”λ“œ 쑰건 뢀뢄은 9둜 mod연산을 κ³„μ†ν•΄μ£Όμ—ˆμ„ λ•Œ 0이 λ‚˜μ˜¨λ‹€λ©΄ 9의 λ°°μˆ˜κ°€ λ˜κΈ°μ— 결둠적으둜 9κ°€ λ©λ‹ˆλ‹€.

 

더 μžμ„Ένžˆ μ•Œμ•„λ΄…μ‹œλ‹€. μ•„λž˜μ˜ ν‘œλŠ” 1~100κΉŒμ§€μ˜ digits 수 κ²°κ³Όμž…λ‹ˆλ‹€.

1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
---------
10 1
11 2
12 3
13 4
14 5
15 6
16 7
17 8
18 9
--------
19 1
20 2
21 3
22 4
23 5
24 6
25 7
26 8
27 9
-------
28 1
29 2
30 3
31 4
32 5
33 6
34 7
35 8
36 9
-------
37 1
38 2
39 3
40 4
41 5
42 6
43 7
44 8
45 9
------
46 1
47 2
48 3
49 4
50 5
51 6
52 7
53 8
54 9
--------
55 1
56 2
57 3
58 4
59 5
60 6
61 7
62 8
63 9
--------
64 1
65 2
66 3
67 4
68 5
69 6
70 7
71 8
72 9
--------
73 1
74 2
75 3
76 4
77 5
78 6
79 7
80 8
81 9
--------
82 1
83 2
84 3
85 4
86 5
87 6
88 7
89 8
90 9
-------
91 1
92 2
93 3
94 4
95 5
96 6
97 7
98 8
99 9
------
100 1

9개의 μˆ˜κ°€ 주기적으둜 값이 1~9κ°€ λ‚˜μ˜΄μ„ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€. mod 9 연산을 ν–‰ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.