반응형

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#region Question 2.5 | |
/// <summary> | |
/// 연결 리스트로 표현된 두 개의 수가 있다고 하자. 리스트의 각 노드는 해당 수의 각 자릿수를 표현한다. | |
/// (이 때 자릿수들은 역순으로 배열되는데, 1의 자릿수가 리스트의 맨 앞에 오도록 배열된다는 뜻이다.) | |
/// 이 두 수를 더하여 그 합을 연결 리스트로 반환하는 함수를 작성하라. | |
/// </summary> | |
/// <param name="number1">첫번째 수</param> | |
/// <param name="number2">두번째 수</param> | |
/// <param name="carry">자리넘김</param> | |
/// <returns><paramref name="number1"/>와 <paramref name="number2"/>를 합한 수. 잘못된 값이 입력되었을 경우 <c>null</c>을 반환한다.</returns> | |
public static LinkedListNode<int> Q5_AddNumbers(LinkedListNode<int> number1, LinkedListNode<int> number2, bool carry) | |
{ | |
if (number1 == null && number2 == null) return null; | |
int value = ((carry) ? 1 : 0); | |
if (number1 != null) value += number1.Data; | |
if (number2 != null) value += number2.Data; | |
bool quotient = (value / 10) > 0; | |
int remainder = value % 10; | |
LinkedListNode<int> result = new LinkedListNode<int>(remainder, Q5_AddNumbers( number1?.Next, number2?.Next, carry), null); | |
return result; | |
} | |
#endregion |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[TestMethod] | |
public void Q2_5() | |
{ | |
Random rand = new Random(); | |
var number1A = new LinkedListNode<int>(rand.Next(0, 10), null, null); | |
var number1B = new LinkedListNode<int>(rand.Next(0, 10), null, number1A); | |
var number1C = new LinkedListNode<int>(rand.Next(0, 10), null, number1B); | |
var number2A = new LinkedListNode<int>(rand.Next(0, 10), null, null); | |
var number2B = new LinkedListNode<int>(rand.Next(0, 10), null, number2A); | |
var number2C = new LinkedListNode<int>(rand.Next(0, 10), null, number2B); | |
var result = LinkedList.Q5_AddNumbers(number1A, number2A, false); | |
var cur = result; | |
int ideal = (number1A.Data + number2A.Data) % 10; | |
Assert.AreEqual(cur.Data, ideal); | |
cur = cur.Next; | |
ideal = (number1B.Data + number2B.Data) % 10 + (ideal >= 10 ? 1 : 0); | |
Assert.AreEqual(cur.Data, ideal); | |
cur = cur.Next; | |
ideal = (number1C.Data + number2C.Data) % 10 + (ideal >= 10 ? 1 : 0); | |
Assert.AreEqual(cur.Data, ideal); | |
} |
반응형
'Develop > 코딩인터뷰' 카테고리의 다른 글
[코딩인터뷰] 문제 2.7 (0) | 2020.04.03 |
---|---|
[코딩인터뷰] 문제 2.6 (0) | 2020.04.03 |
[코딩인터뷰] 문제 2.4 (0) | 2020.04.03 |
[코딩인터뷰] 문제 2.3 (0) | 2020.04.03 |
[코딩인터뷰] 문제 2.2 (0) | 2020.04.03 |
꾸준히 노력하는 개발자 "김예건" 입니다.