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 |