[LeetCode/Python] 66. Plus One

ㅎㅎ·2024년 4월 16일
0

LeetCode

목록 보기
27/33

66. Plus One

배열은 하나의 숫자를 의미한다. 해당 수에 1을 더하는 문제다.

Solution

  1. 배열의 수를 하나씩 꺼내 문자열에 저장한다.
  2. 해당 문자열을 숫자로 바꿔 1을 증가시킨다.
  3. 배열에 한 자리 씩 다시 담는다.
class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        s = ""
        for num in digits: s += str(num)
        s = str(int(s) + 1)
        ans = []
        for i in s: ans.append(int(i))
        return ans

시간 복잡도

  1. 각 요소를 문자열로 변환해서 이어 붙이는 데에 O(n)
  2. 문자열을 정수로 변환하는데에 O(n)
  3. 문자열 s를 순회하면서 정수로 변환해 ans에 추가하는데 O(n)

전체적으로 코드의 시간 복잡도는 O(n)이다.

코드 개선 - 파이썬 문법 공부

내 코드는 너무... C같다.
오랫동안 C패밀리에게 절여져서 파이썬의 장점을 십분 못 살리는 나의 코드.

class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        s = ''.join(str(i) for i in digits)
        n = int(s)+1
        ans = list(map(int, str(n)))
        return ans
  • '구분자'.join(리스트) : 리스트의 요소를 합쳐서 사이에 구분자를 넣고 하나의 문자열로 바꾸어준다.
  • 컴프리헨션 : for문을 저렇게 안에서 바로 쓸 수 있다는 게 도무지 익숙해지지가 않는다...
    [x for x in range(1, 10+1) if x % 2 == 0] # [2, 4, 6, 8, 10]
    if문도 쓸 수 있고 중첩도 가능하다.
  • map() : 리스트의 요소를 지정한 함수로 처리해준다.

훨씬 깔끔하고 파이썬 코드 같다. 컴프리헨션 컴프리헨션 컴프리헨션

profile
Backend

0개의 댓글