Algorithm/Leetcode
Leetcode_Add digits
Focusing_iOS
2022. 6. 30. 13:02
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
풀이를 시작해보자!!
나는 아래와 같이 풀이를 했었다.
일단, num 이 0이거나 음수면 return 0을 하기로 했다. 문제의 조건대로.
그런다음에, Int -> String -> Array로 변환을 하였고 while 문안에 두자리수가 넘으면 for문을 계속 돌렸으면 좋겠다.
라고 한다음에 for문 안에는 sum을 누적하는 방식으로 풀이 하였다.
근데, 아쉽게도 시간 초과가 생겼다.
어떻게 하는 것이 좋을까? 다른 고수분들의 답변을 참고했다.
class Solution {
func addDigits(_ num: Int) -> Int {
if num <= 0{
return 0
}
var sum: Int = 0
var numS = String(num)
var numA = Array(numS)
repeat{
for num in numA{
sum += Int(String(num))!
}
}while sum >= 10
return sum
}
}
..... 정말 잘 짜셨다.AsahiOcean!!
너무 깔끔하다...!!
class Solution {
func addDigits(_ num: Int) -> Int {
return num < 10 ? num : (num % 9 == 0 ? 9 : num % 9)
}
}
sudiptobd님의 해결책도 가져와봤다.
일반적인 코드이다.
getSum이라는 함수를 구현해주었다.
num 값을 받으면, num의 나머지 그리고 10으로 나누어서 누적해서 해를 구하는 방식이다.
예로, 111이 들어오면, 111 > 0 이니깐, while 문이 실행됩니다.
그런 다음, 111을 % 10을 하게 되면 1이 sum으로 누적이 되고 x는 11이 됩니다.
다시 x > 11을 만족하기 때문에 다시 실행이 되고 11 % 10 이 sum으로 누적이 되고 x는 1이 됩니다.
그리고 또 x > 0을 만족하기 때문에 while 문이 실행이 되고 x% 10 이 sum 으로 누적이 되고 x는 0이 됩니다.
sum은 총 3이되고 리턴하게 됩니다.
만약, 엄청 큰수가 들어온다면, 이것을 일의자리 숫자가 될때 까지 반복하면 되겠습니다.
class Solution {
func addDigits(_ num: Int) -> Int {
var value = getSum(num)
while value > 9 {
value = getSum(value)
}
return value
}
func getSum(_ num: Int) -> Int {
var x = num
var sum = 0
while x > 0{
sum += x%10
x=x/10
}
return sum
}
}
추가적으로....
class Solution {
func addDigits(_ num: Int) -> Int {
var res = num
while res > 9 {
var next = 0
while res != 0 {
next += res % 10
res = res / 10
}
res = next
}
return res
}
}