본문 바로가기
알고리즘/프로그래머스

[LeetCode] Add Two numbers

by ㅣlㅣl 2024. 6. 25.

문제

https://leetcode.com/problems/add-two-numbers/description/

leetcode 사이트의 문제는 처음 풀어본다! 신기...

백준은 자유형식, 프로그래머스는 함수 형태로 초기 포맷이 주어진다면, 여기에서는 class 형태로 기본 포맷이 주어진다는 게 가장 특이한 점인듯

 


 

주요 아이디어

문제가 영어지만(...) 풀이 과정 자체는 굉장히 간단한 편!

  • 음수가 아닌 수만 담겨있는 2개의 linked list를 입력 받고
  • 둘을 합한 수가 담긴 linked list 반환하기

문제 예시

 


 

코드 구현 (Python 3)

더보기

 

# Definition for singly-linked list.
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next
"""
양방향은 안되는...듯?
그러면 그냥 next 해주면서 자릿수**10 해서 더해주기
-> 출력도 어차피 역순이므로 그냥 순회하면서 더해주는 게 더 깔끔할 것  같음

입력부터 써줘야하는 줄 알았는데 그냥 Solution class만 완성하면 됨
"""
from typing import Optional

class Solution:
    def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
        result_header = ListNode(0)
        p = result_header
        value = 0

        # l1, l2 둘 다 끝나고, value 끝까지 갈 때까지
        while l1 or l2 or value:
            if l1:
                value += l1.val
                l1 = l1.next

            if l2:
                value += l2.val
                l2 = l2.next
            
            p.next = ListNode(value % 10) # 자릿수
            p = p.next
            value = value // 10 # 다음 자릿수

        return result_header.next

 

 

 

제출 결과

 

이런 식으로 내가 리더보드 몇 %에 들었는지 바로바로 확인도 가능..

해외 취업을 노린다면 꼭 필요할 듯 하다!