본문 바로가기

Develop/코딩인터뷰

[코딩인터뷰] 문제 2.5

반응형

코딩 인터뷰
문제 2.5

#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
view raw Code_Q2_5.cs hosted with ❤ by GitHub
[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);
}
view raw Test_Q2_5.cs hosted with ❤ by GitHub
반응형

'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