강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

박가님의 프로필 이미지
박가

작성한 질문수

38군데 합격 비법, 2025 코딩테스트 필수 알고리즘

2-6. 링크드 리스트 문제

2-6 get_linked_list_sum 형변환으로 풀었는데

해결된 질문

작성

·

114

·

수정됨

0

1. 현재 학습 진도

  • 몇 챕터/몇 강을 수강 중이신가요? 2-6

  • 어떤 알고리즘을 학습하고 계신가요? linked_list

  • 여기까지 이해하신 내용은 무엇인가요?

 

2. 어려움을 겪는 부분

  • 어느 부분에서 막히셨나요? 막힌건아니구..

  • 코드의 어떤 로직이 이해가 안 되시나요? 이해도되는데

  • 어떤 개념이 헷갈리시나요? 내 풀이는 정석이 아닌가싶어서

 

3. 시도해보신 내용

  • 문제 해결을 위해 어떤 시도를 해보셨나요? 생각을 많이함

  • 에러가 발생했다면 어떤 에러인가요? 에러 아님

  • 현재 작성하신 코드를 공유해주세요

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)입니다. 그래서 문자열에 새로운 문자를 더할 때마다

  1. 새로운 문자열을 위한 메모리를 할당

  2. 기존 문자열을 복사

  3. 새 문자를 추가

  4. 이전 문자열은 가비지 컬렉션 대상이 됨

반면 수학적 방식은 다음과 같이 동작합니다.

sum = 0
# [1,2,3] 링크드 리스트의 경우:
sum = 0 * 10 + 1  # sum = 1
sum = 1 * 10 + 2  # sum = 12
sum = 12 * 10 + 3 # sum = 123

이 방식은:

  1. 단순히 하나의 정수 변수만 사용

  2. 숫자를 더하고 곱하는 연산만 수행

  3. 추가 메모리 할당이나 복사가 필요 없음

즉, 문자열 방식은 매 단계마다 새로운 문자열을 만들어내는 반면, 수학적 방식은 하나의 변수를 계속 재사용합니다. 마치 문자열 방식은 매번 새 종이에 숫자를 적어가는 것이고, 수학적 방식은 지우개로 지웠다 쓸 수 있는 화이트보드를 사용하는 것과 비슷하다고 하기 때문에 메모리에 더 효율적이라고 할 수 있습니다!

박가님의 프로필 이미지
박가
질문자

아하~ 참조변수를 매번 할당하는거니까~ 이해했습니다. 감사합니다.

박가님의 프로필 이미지
박가

작성한 질문수

질문하기