리트코드, 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을 더하고, 다시 리스트로 만들어 반환한다. 리스트 컴프리헨션을 통해 간단하게 작성할 수 있다.
'개발 > Algorithm' 카테고리의 다른 글
[리트코드] Merge Two Sorted Lists(python) (0) | 2021.06.10 |
---|---|
[리트코드] Merge Sorted Array(python) (0) | 2021.06.10 |
[리트코드] Palindrome Linked List(python) (0) | 2021.06.07 |
[프로그래머스] 피보나치 수(python) (0) | 2021.06.06 |
[리트코드] Best Time to Buy and Sell Stock(python) (0) | 2021.06.05 |