250628

lililllilillll·2025년 6월 28일

개발 일지

목록 보기
216/350

✅ What I did today


  • LeetCode


⚔️ LeetCode


2. Add Two Numbers

wo::ListNode* Two::addTwoNumbers(ListNode* l1, ListNode* l2)
{
	//ListNode* l3 = nullptr;
	//ListNode* start;
	//bool up = false;

	//while (l1 != nullptr || l2 != nullptr || up == true)
	//{
	//	if (l3 != nullptr)
	//	{
	//		l3->next = new ListNode();
	//		l3 = l3->next;
	//		if (up)
	//		{
	//			l3->val += 1;
	//			up = false;
	//		}
	//	}
	//	else
	//	{
	//		l3 = new ListNode();
	//		start = l3;
	//	}

	//	if (l1 != nullptr)
	//	{
	//		l3->val += l1->val;
	//		l1 = l1->next;
	//	}
	//	if (l2 != nullptr)
	//	{
	//		l3->val += l2->val;
	//		l2 = l2->next;
	//	}
	//	if (l3->val >= 10)
	//	{
	//		l3->val -= 10;
	//		up = true;
	//	}
	//}

	//return start;

	ListNode* ans = new ListNode();
	ListNode* prev = nullptr;
	ListNode* temp = ans;

	int carry = 0;
	while (l1 || l2 || carry) {
		int sum = 0;
		if (l1) {
			sum += l1->val;
			l1 = l1->next;
		}

		if (l2) {
			sum += l2->val;
			l2 = l2->next;
		}

		sum += carry;

		carry = sum / 10;
		sum = sum % 10;

		ans->val = sum;
		ans->next = new ListNode();
		prev = ans;
		ans = ans->next;

	}

	prev->next = nullptr;
	return temp;
}

예외처리하는 것도 귀찮고 저장용량도 줄일 수 있으니 숫자로 저장한 다음에 LL로 저장하려고 했는데
조건 자체가 노드 100개까지 가능했음. 조건을 꼼꼼히 안 읽어서 시간 낭비.

개선 가능했던 점

  • nullptr나 0이면 false취급이다
  • carry라는 중간 변수를 도입하면 굳이 up으로 true false 안 나눠도 됐다
  • 처음 노드를 특별취급하는게 아니라 맨 마지막에 필요없는 노드 잘라버리면 됐다.

c++에선 배열 자리에 배열 대신 포인터를 줘도 된다

profile
너 정말 **핵심**을 찔렀어

0개의 댓글