0, 1, 2만으로 구성된 3진법 숫자를 나타내는 문자열 s가 주어졌을 때, 이를 동일한 값을 가지는 10진수 정수로 변환하는 문제입니다.
예를 들어 입력이 "10122"라면 출력은 98이 되어야 합니다.
접근 방법
이 문제는 호너의 방법(Horner's method)과 유사한 방식으로 효율적으로 해결할 수 있습니다. 문자열을 왼쪽부터 오른쪽으로 한 자릿수씩 읽으면서, 누적값에 3을 곱한 뒤 현재 자릿수를 더해주면 됩니다.
- 누적값 ans를 0으로 초기화합니다.
- 문자열 s의 각 자릿수 c에 대해 다음을 반복합니다.
- ans = 3 × ans + c
- 모든 자릿수를 처리한 후 최종 ans를 반환합니다.
구현 예제
class Solution:
def solve(self, s):
ans = 0
for c in map(int, s):
ans = 3 * ans + c
return ans
ob = Solution()
print(ob.solve("10122"))
입력
"10122"
출력
98
동작 과정 상세 설명
입력 "10122"가 어떻게 처리되는지 단계별로 살펴보겠습니다.
- 초기 상태: ans = 0
- '1' 처리: ans = 3 × 0 + 1 = 1
- '0' 처리: ans = 3 × 1 + 0 = 3
- '1' 처리: ans = 3 × 3 + 1 = 10
- '2' 처리: ans = 3 × 10 + 2 = 32
- '2' 처리: ans = 3 × 32 + 2 = 98
검산해 보면 1×81 + 0×27 + 1×9 + 2×3 + 2×1 = 81 + 9 + 6 + 2 = 98로 올바른 결과임을 확인할 수 있습니다.
추가 팁: 내장 함수 활용하기
실무에서는 Python의 내장 함수 int()를 사용하면 한 줄로 간단히 변환할 수 있습니다.
result = int("10122", 3) # 결과: 98int(s, 3)은 두 번째 인자로 진법을 지정하여 해당 진수의 문자열을 10진수 정수로 변환해 줍니다. 알고리즘 학습 목적이라면 위의 직접 구현 방식을, 실용적인 코드 작성에는 내장 함수를 활용하는 것이 좋습니다.