leetcode-66. Plus One

Youngsun Joung·2026년 1월 1일

Leetcode

목록 보기
80/91

1. 문제 소개

66. Plus One

2. 나의 풀이

다행히 쉬운 풀이였다.
숫자로 만든 이후에 다시 배열로 바꾸었다.
시간복잡도는 O(n)O(n)이다.

class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        temp = 1                                   # 최종 정수값을 누적할 변수(초기값은 +1 반영)
        power = 0                                  # 현재 자릿수의 10의 거듭제곱 지수

        while digits:                              # digits가 빌 때까지 반복(뒤에서부터 처리)
            n = digits.pop()                       # 가장 낮은 자릿수부터 하나씩 꺼냄
            temp += n * (10 ** power)              # 해당 자릿수를 정수값으로 환산해 temp에 더함
            power += 1                             # 다음 자릿수로 이동

        return list(map(int, str(temp)))           # 계산된 정수를 문자열로 바꾼 뒤 각 자릿수를 다시 리스트로 변환

3. 다른 풀이

몫과 나머지를 이용한 풀이다.
비슷한 풀이라고 생각한다.
시간복잡도는 똑같이 O(n)O(n)이다.

class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        carry = 1                         # +1 연산에서 시작되는 초기 carry
        for i in range(len(digits) - 1, -1, -1):
            s = digits[i] + carry         # 현재 자릿수에 carry를 더함
            digits[i] = s % 10            # 현재 자릿수 값은 10으로 나눈 나머지
            carry = s // 10               # 10으로 나눈 몫이 다음 자릿수로 전달될 carry

        if carry:                         # 모든 자릿수 처리 후에도 carry가 남아 있으면
            digits = [1] + digits         # 가장 앞자리에 1을 추가 (예: 999 -> 1000)

        return digits                     # 최종 자릿수 배열 반환

4. 마무리

새해 복 많이 받으세요.

profile
Junior AI Engineer

0개의 댓글