알고리즘

링크드 리스트 문제

na_o 2021. 8. 22. 17:59
728x90

[두 링크드 리스트의 합 계산]

다음과 같은 두 링크드 리스트를 입력받았을 때, 합산한 값을 반환하시오.

예를 들어, 아래와 같은 링크드 리스트를 입력받았다면, 

각각 678, 354이므로 두 개의 총합

678 + 354 = 1032를 반환해야 한다.

단, 각 노드의 데이터는 한 자리 수 숫자만 들어갈 수 있다.

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None


class LinkedList:
    def __init__(self, value):
        self.head = Node(value)

    def append(self, value):
        cur = self.head
        while cur.next is not None:
            cur = cur.next
        cur.next = Node(value)


def get_linked_list_sum(linked_list_1, linked_list_2):
    # 구현해보세요!
    return 1032


linked_list_1 = LinkedList(6)
linked_list_1.append(7)
linked_list_1.append(8)

linked_list_2 = LinkedList(3)
linked_list_2.append(5)
linked_list_2.append(4)

print(get_linked_list_sum(linked_list_1, linked_list_2))

[해결 방법]

각 링크드 리스트의 헤드를 따라가면서, 자릿수에 맞게 더하면 됨

이 때, 자릿수에 맞게 더하기 위해서는 총액에서 10을 곱한 다음 현재 노드의 값을 더하면 됨!

0 * 10 + 6 = 6

6 * 10 + 7 = 67

67 * 10 + 8 = 678

 

반복되는 부분을 _get_linked_list_sum이라는 함수로 만들어서 중복을 없앰

def _get_linked_list_sum(linked_list):
    head = linked_list.head
    linked_list_sum = 0
    while head is not None:
        linked_list_sum = linked_list_sum * 10 + head.data
        head = head.next
    return linked_list_sum


def get_linked_list_sum(linked_list_1, linked_list_2):
    sum1 = _get_linked_list_sum(linked_list_1)
    sum2 = _get_linked_list_sum(linked_list_2)
    return sum1 + sum2

 

[내가 푼 풀이]

링크드 리스트의 원소를 하나씩 꺼내서 이어붙여 문자열로 만든 후 정수로 변환하고 더해줌

def linked_list_to_str(linked_list):
    current_node = linked_list.head
    num = ""
    while current_node is not None:
        num += str(current_node.data)
        current_node = current_node.next
    return num


def get_linked_list_sum(linked_list_1, linked_list_2):
    linked_list_sum = int(linked_list_to_str(linked_list_1)) + int(linked_list_to_str(linked_list_2))
    return linked_list_sum

'알고리즘' 카테고리의 다른 글

재귀함수 - 1  (0) 2021.08.23
이진탐색  (0) 2021.08.23
링크드 리스트 구현 - 2  (0) 2021.08.22
링크드 리스트 구현 - 1  (0) 2021.08.21
클래스  (0) 2021.08.21