📌 LeetCode [1945]: Sum of Digits of String After Convert
🔗 문제 링크
문제 설명 📄
주어진 문자열 s
를 다음 과정을 통해 변환합니다:
- 문자열의 각 문자를 알파벳 순서에 따른 숫자로 변환합니다.
예:a -> 1
,b -> 2
, ...,z -> 26
. - 변환된 숫자를 하나의 문자열로 연결합니다.
- 이 문자열을
k
번 반복하여 각 자리의 숫자를 더합니다. - 최종 결과를 반환합니다.
문제 접근 방식 📋
- 문자 변환:
- 문자열
s
를 알파벳 순서에 따른 숫자로 변환하여 문자열 리스트로 만듭니다. ord(char) - 96
을 사용해 알파벳 숫자를 얻습니다.
- 문자열
- 자리수 합 계산:
- 변환된 문자열을
k
번 반복해서 각 자리의 숫자를 더하며 변환합니다. - 매번 자리수 합을 계산해 문자열로 다시 변환합니다.
- 변환된 문자열을
Solution 💻
class Solution:
def getLucky(self, s: str, k: int) -> int:
convert = []
for i in s:
convert.append(str(ord(i) - 96))
for _ in range(k):
transform = 0
for i in "".join(convert):
transform += int(i)
convert = str(transform)
return int(convert)
시간 복잡도 분석 ⏲️
- 문자 변환: (O(n)), (n)은 문자열 (s)의 길이.
- 자리수 합 계산: 각 반복마다 자리수를 (m)이라 하면, (k times O(m)).
- 최종 시간 복잡도: (O(n + k times m)).
공간 복잡도 분석 🗄️
- 변환 리스트: (O(n)).
- 문자열 저장: (O(m)), (m)은 숫자의 자리수.
리팩토링 🛠️
개선된 코드
class Solution:
def getLucky(self, s: str, k: int) -> int:
convert = sum(int(c) for char in s for c in str(ord(char) - 96))
for _ in range(k - 1):
convert = sum(int(c) for c in str(convert))
return convert
리팩토링 후 시간 복잡도 ⏲️
- (O(n + k times m)), 첫 변환과 반복 계산 시간 동일.
리팩토링 후 공간 복잡도 🗄️
- (O(m)), 변환된 숫자의 자리수 공간 사용만 필요.
'알고리즘' 카테고리의 다른 글
LeetCode [1480]: Running Sum of 1d Array (1) | 2024.12.11 |
---|---|
LeetCode [1598]: Crawler Log Folder (0) | 2024.12.10 |
LeetCode [1460]: Make Two Arrays Equal by Reversing Subarrays (1) | 2024.12.08 |
LeetCode [1518]: Water Bottles (1) | 2024.12.08 |
LeetCode [2582]: Pass the Pillow (1) | 2024.12.08 |