CS/자료구조 문제

문제 // 자료구조 // 리스트(List) // 리스트합 // toJava

문스코딩 2018. 8. 14. 16:48

/**
* [리스트의합]
* 연결리스트로 숫자를 표현할 때 각 노드가 자릿수 하나를 가리키는 방식으로표현할 수 있다.
* 각 숫자는 역순으로 배열되어 있는데 첫번째 자릿수가 리스트의 맨 앞에 위치하게 배열된다는 뜻이다.
* 이와 같은 방식을 표현된 숫자 두개가 있을 때 이 두수를 더해 그 합을 연결 리스트로 반환하는 함수를 작성
*
* [풀이]
* => 리스트를 직접구현 ?
* => 최대 혹은 최소 몇자리수까지 리스트가 존재하는가 ?
*
* */

public class Q05 {

public static void main(String[] args) {
sumList(Arrays.asList(9, 9, 9), Arrays.asList(9, 9, 9)); // 1998
}

/* sumList - 외부구현 */
static void sumList(List<Integer> listA, List<Integer> listB) {
List<Integer> listC = new LinkedList<>();
Iterator<Integer> iA, iB, iC;

// == 자릿수비교 ==
if(listA.size() > listB.size()) {
iA = listA.iterator();
iB = listB.iterator();
} else {
iA = listB.iterator();
iB = listA.iterator();
}

// == 합산 ==
int overNumber = 0;
while(iA.hasNext()) {
int sum = iA.next();
if(iB.hasNext()) sum += iB.next();
sum += overNumber;
listC.add(sum % 10);
overNumber = sum / 10;
}

// == 오버헤드계산 ==
if(overNumber != 0) {
listC.add(overNumber);
}

// == 테스트 ==
iC = listC.iterator();
while(iC.hasNext()) {
System.out.println(iC.next());
}
}

}


반응형