해결된 질문
작성
·
114
·
수정됨
0
몇 챕터/몇 강을 수강 중이신가요? 2-6
어떤 알고리즘을 학습하고 계신가요? linked_list
여기까지 이해하신 내용은 무엇인가요?
어느 부분에서 막히셨나요? 막힌건아니구..
코드의 어떤 로직이 이해가 안 되시나요? 이해도되는데
어떤 개념이 헷갈리시나요? 내 풀이는 정석이 아닌가싶어서
문제 해결을 위해 어떤 시도를 해보셨나요? 생각을 많이함
에러가 발생했다면 어떤 에러인가요? 에러 아님
현재 작성하신 코드를 공유해주세요
def get_linked_list_sum(linked_list_1, linked_list_2):
concat_value_1 = ""
concat_value_2 = ""
cur_1 = linked_list_1.head
cur_2 = linked_list_2.head
while cur_1 is not None:
concat_value_1 += str(cur_1.data)
cur_1 = cur_1.next
while cur_2 is not None:
concat_value_2 += str(cur_2.data)
cur_2 = cur_2.next
return int(concat_value_1) + int(concat_value_2)
강사님처럼 10을 곱해주는게아니라
str로 형변환해서 그냥 붙힌다음에
다시 int로 파싱해서 리턴했는데...이건 너무 야매풀이일까요..ㅠ
이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다! 😊
답변 1
1
안녕하세요 박가님! 좋은 질문 감사드립니다!
두 방식 모두 정확한 결과를 도출합니다. 따라서 "야매 풀이"라고 걱정하실 필요 없습니다! 이미 훌륭한 값을 내주신 것 같습니다.
제가 풀이한 방식을 수학적 방식, 박가님이 풀이한 방식을 문자열 방식이라고 한다면
문자열 방식: 직관적이고 이해하기 쉬움. 문자열 조작을 통해 간단히 해결
수학적 방식: 메모리 사용이 더 효율적. 문자열 변환 없이 순수 수치 계산으로 해결
인 것 같습니다!
따라서 제안해주신 풀이 방법도 충분히 좋은 해결책입니다!! 계속해서 이런 식으로 여러 가지 해결 방법을 고민하고 각각의 장단점을 분석하시면 좋은 개발자로 성장하실 수 있을 것 같습니다!
추가로 왜 수학적 방식이 메모리 사용에 더 효율적인지 설명드리겠습니다
문자열 방식을 사용할 때 일어나는 일:
# [1,2,3] 링크드 리스트의 경우:
concat_value_1 += "1" # 새로운 문자열 "1" 생성
concat_value_1 += "2" # 새로운 문자열 "12" 생성
concat_value_1 += "3" # 새로운 문자열 "123" 생성
파이썬에서 문자열은 불변(immutable)입니다. 그래서 문자열에 새로운 문자를 더할 때마다
새로운 문자열을 위한 메모리를 할당
기존 문자열을 복사
새 문자를 추가
이전 문자열은 가비지 컬렉션 대상이 됨
반면 수학적 방식은 다음과 같이 동작합니다.
sum = 0
# [1,2,3] 링크드 리스트의 경우:
sum = 0 * 10 + 1 # sum = 1
sum = 1 * 10 + 2 # sum = 12
sum = 12 * 10 + 3 # sum = 123
이 방식은:
단순히 하나의 정수 변수만 사용
숫자를 더하고 곱하는 연산만 수행
추가 메모리 할당이나 복사가 필요 없음
즉, 문자열 방식은 매 단계마다 새로운 문자열을 만들어내는 반면, 수학적 방식은 하나의 변수를 계속 재사용합니다. 마치 문자열 방식은 매번 새 종이에 숫자를 적어가는 것이고, 수학적 방식은 지우개로 지웠다 쓸 수 있는 화이트보드를 사용하는 것과 비슷하다고 하기 때문에 메모리에 더 효율적이라고 할 수 있습니다!
아하~ 참조변수를 매번 할당하는거니까~ 이해했습니다. 감사합니다.