본문 바로가기

개발/Algorithm

[리트코드] Plus One(python)

리트코드, Plus One_1 더하기

 

TL;DR

  • 해결해야 하는 문제를 구현할 수 있는지

문제 분석

1. 비어 있지 않은 음수가 아닌 정수가 주어지는 10진수 숫자가 저장된 리스트로 구성된 수에 1을 더하라.
2. 가장 큰 자리수의 수가 가장 처음에 저장되고, 각 원소들은 단일 숫자를 포함하고 있다.
3. 0만 있는 경우를 제외하고는 가장 처음에 0이 오지 않는다고 가정한다.

 

- 1 : 해결해야 하는 문제 조건에 대해 설명하고 있다.

- 2 : 리스트의 가장 앞쪽부터 가장 큰 자릿수의 숫자를 나타낸다. 각 자릿수의 숫자는 10 미만의 정수이다.

- 3 : 리스트이 [0]으로 주어지는 경우를 제외하고, 0이 리스트의 가장 앞, 즉 가장 큰 자릿수 위치에 오면 안된다.

입출력 형태

입출력 예시

 

- digits : 10 미만의 자연수로 구성된 리스트이 주어진다.

- output : 리스트로 구성된 숫자에 1을 더한 값을 배열에 넣어 반환한다.

- 예시 1 : digit로 만든 숫자는 123이고 1을 더한 124를 배열에 넣어 반환한다.

풀이

class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        if digits[0] == 0: # 예외처리
            return [1]
        
        num = 0
        answer = []
        for i, digit in enumerate(digits): # 숫자 생성
            num += digit * 10 ** (len(digits) - 1 - i)
            
        num += 1
        return [int(s) for s in str(num)] # 1을 더한 수 반환

 

- 리스트에 가장 처음에 0이 오는 수에 대한 처리를 한다. 문제 가정에 따라 0 하나만 리스트에 들어가는 경우를 제외하고 나머지 입력들에 대해서는 0으로 시작하는 리스트이 주어지지 않는다. 만약 0으로 시작하지 않는다는 가정이 없다면, 추가적인 조건을 부여해야 한다.

- digit을 구성하고 있는 숫자들을 합친 숫자를 만든다. 각 자리수를 리스트의 인덱스를 활용하여 만들 수 있다.

    - 예시 2를 통해 동작을 살펴본다. [4, 3, 2, 1]

        - 주어진 리스트의 길이는 4이다.(len(digits) == 4)

        - 0번째 인덱스인 4는 숫자로 표현하면 10^3의 위치에 해당한다.

        - 1번째 인덱스인 3은 숫자로 표현하면 10^2의 위치에 해당한다.

        - 2번째 인덱스인 2는 숫자로 표현하면 10^1의 위치에 해당한다.

        - 3번째 인덱스인 1은 숫자로 표현하면 10^0의 위치에 해당한다.

        - 이를 통해 `digits * 10 ** (len(digits) - 1 - i)`가 각 숫자의 자릿수를 나타내는 규칙을 발견할 수 있다.

- 숫자로 만든 수에 1을 더하고, 다시 리스트로 만들어 반환한다. 리스트 컴프리헨션을 통해 간단하게 작성할 수 있다.

반응형