해결된 질문
작성
·
41
0
몇 챕터/몇 강을 수강 중이신가요? 2-6
어떤 알고리즘을 학습하고 계신가요? LinkedList
여기까지 이해하신 내용은 무엇인가요? 어떻게 로직이 흘러가는지 이해가 된 상태 입니다.
어느 부분에서 막히셨나요? 어려운 부분은 아니고 뭔가 제 풀이에 대해서 공유 해드리고 싶습니다!
코드의 어떤 로직이 이해가 안 되시나요? 이해가 안되진 않는 것 같습니다!
어떤 개념이 헷갈리시나요? 없습니다!
문제 해결을 위해 어떤 시도를 해보셨나요? 우선 값들을 StringBuilder 로 만들어서 각각 Int로 파싱한다음 더해주는 과정을 해보았습니다.
에러가 발생했다면 어떤 에러인가요? 없습니다!
현재 작성하신 코드를 공유해주세요
package algorithm_practice.second_week;
public class GetLinkedLiistSum_01 {
// Node 클래스 정의
static class Node {
int data;
Node next;
Node(int data) {
this.data = data;
this.next = null;
}
}
// LinkedList 클래스 정의
static class LinkedList {
Node head;
public LinkedList(int value) {
this.head = new Node(value);
}
public void append(int value) {
Node cur = head;
while (cur.next != null) {
cur = cur.next;
}
cur.next = new Node(value);
}
}
// 두 연결 리스트의 합을 계산하는 메서드
public static int getLinkedListSum(LinkedList list1, LinkedList list2) {
StringBuilder firstNumber = new StringBuilder();
StringBuilder secondNumber = new StringBuilder();
Node cur1 = list1.head;
Node cur2 = list2.head;
while (cur1 != null && cur2 != null) {
firstNumber.append(cur1.data);
secondNumber.append(cur2.data);
cur1 = cur1.next;
cur2 = cur2.next;
}
int result = Integer.parseInt(firstNumber.toString()) + Integer.parseInt(secondNumber.toString());
return result;
}
// 메인 실행 테스트
public static void main(String[] args) {
LinkedList linkedList1 = new LinkedList(6);
linkedList1.append(7);
linkedList1.append(8);
LinkedList linkedList2 = new LinkedList(3);
linkedList2.append(5);
linkedList2.append(4);
int result = getLinkedListSum(linkedList1, linkedList2);
System.out.println("두 연결 리스트의 합: " + result); // 예시: 1032
}
}
파이썬 코드를 자바로 변환해서 풀어봤는데 이렇게 접근해도 좋은 풀이 일까요~?
이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다! 😊
답변 2
0
안녕하세요 근희님! 좋은 질문 감사합니다
자바로 새롭게 코드를 작성해서 풀어보다니 너무 훌륭합니다!!
파이썬 코드와 비교해보면 개념적으로 동일한 접근법을 사용하신 것 같습니다. 다만 파이썬 코드에서는 get_single_linked_list_sum
함수에서 순회하면서 값을 계산할 때 자릿수를 고려하여 곱하기 10을 하는 방식을 사용했고, 자바 코드에서는 StringBuilder
를 활용해 문자열로 만든 후 숫자로 변환하는 방식을 사용하셨습니다.
두 방식 모두 잘 작동하며 각각의 장단점이 있습니다
파이썬 코드 방식 (곱하기 10 사용):
장점: 숫자를 바로 계산하므로 추가 변환 없음
단점: 연결 리스트가 매우 길면 자릿수 계산에 주의해야 함
자바 코드 방식 (StringBuilder 사용):
장점: 문자열 조작이 직관적이고 코드가 간결함
단점: 문자열→숫자 변환 과정이 추가됨
다만, 자바 코드에서 한 가지 주의할 점이 있습니다.
while (cur1 != null && cur2 != null) {
firstNumber.append(cur1.data);
secondNumber.append(cur2.data);
cur1 = cur1.next;
cur2 = cur2.next;
}
이 부분은 두 연결 리스트의 길이가 다른 경우 처리를 못할 수 있습니다. 예를 들어, 한 리스트가 다른 리스트보다 길면 긴 리스트의 나머지 부분이 무시될 수 있습니다. 따라서 다음과 같이 수정하면 더 확장성 있는 코드로 사용될 수 있습니다.
while (cur1 != null) {
firstNumber.append(cur1.data);
cur1 = cur1.next;
}
while (cur2 != null) {
secondNumber.append(cur2.data);
cur2 = cur2.next;
}
이 내용을 제외하면, StringBuilder를 활용한 접근법은 자바스러운 좋은 풀이입니다! 수업의 내용을 이해하고 자바로 새롭게 풀어보는 모습 너무 훌륭하십니다!! 코테 부술때까지 파이팅이십니다!
0
안녕하세요, 인프런 AI 인턴입니다.
정근희님께서 공유해주신 LinkedList 합계 구하는 자바 코드를 잘 보았습니다.
적절한 데이터 구조 사용: LinkedList의 각 노드를 탐색하며 숫자를 문자열로 결합하고, 이를 숫자로 변환하여 합을 구하는 방식은 문제를 해결하기 위한 적절한 접근 방식입니다. 만약 숫자가 매우 큰 경우에도 StringBuilder를 사용한 방법은 Java의 Integer.MAX_VALUE 초과 문제를 피할 수 있어 좋습니다.
코드 개선 제안:
성능 개선:
코드 실행 및 테스트 필요:
현재 작성하신 코드는 기본적인 로직으로 연결 리스트의 합을 구하는 데 있어 효과적입니다. 이러한 방법을 통해 논리 구현 능력을 향상시킬 수 있습니다. 더 궁금한 사항이 있으면 언제든지 문의주세요! 😊