반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 프로그래머스
- programmers
- 리트코드
- 프로콘 갈림현상
- DP
- baekjoon
- 격리수준
- 자소서
- SRE
- GitHub Desktop
- 취준
- git
- python3
- Github
- Ultimate Search
- 네이버 검색 시스템
- LeetCode
- 제노블레이드 2
- C++
- 알고리즘 종류 정리
- 알고리즘
- ASF-110
- algorithm
- 코딩테스트
- Pro-Con
- Python
- 프로콘
- Algorithmus
- 백준
- 백트래킹
Archives
- Today
- Total
산타는 없다
[리트코드 / LeetCode] 2. Add Two Numbers 풀이 - C++ 본문
반응형
문제 원문
You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order, and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Example 1:
Input: l1 = [2,4,3], l2 = [5,6,4] Output: [7,0,8] Explanation: 342 + 465 = 807.
Example 2:
Input: l1 = [0], l2 = [0] Output: [0]Example 3:
Input: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9] Output: [8,9,9,9,0,0,0,1]
Constraints:
- The number of nodes in each linked list is in the range [1, 100].
- 0 <= Node.val <= 9
- It is guaranteed that the list represents a number that does not have leading zeros.
코드 원문
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
}
};
풀이
주어진 ListNode 구조체로 덧셈을 구현하는 문제입니다.
구조체가 주어진 문제를 자주 접해보지 않아 초반엔 조금 얼타서 매개변수 컨트롤도 잘못하고 뻘짓하게 되었네요..
아무튼 이 문제는 Linked List를 컨트롤하는 것이 중요합니다.
저는 두 리스트의 값을 더하여 결과 리스트에 넣으면서 문제를 해결했습니다.
그러는 과정에 올림수 처리가 필요하여 작업해주었습니다.
성공 코드
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* l1 = new ListNode(2, new ListNode(4, new ListNode(3)));
ListNode* l2 = new ListNode(5, new ListNode(6, new ListNode(4)));
int num1 = 0;
int num2 = 0;
ListNode *answer = new ListNode();
ListNode *temp1, *temp2, *AnswerTemp;
temp1 = l1;
temp2 = l2;
AnswerTemp = answer;
int count = 0;
bool bVal1, bVal2;
bVal1 = true;
bVal2 = true;
bool UpPoint = false;
int sum;
while (true)
{
//초기화
sum = 0;
num1 = 0;
num2 = 0;
//List 1
if (bVal1)
{
num1 = temp1->val;
temp1 = temp1->next;
if (temp1 == NULL)
bVal1 = false;
}
//List 2
if (bVal2)
{
num2 = temp2->val;
temp2 = temp2->next;
if (temp2 == NULL)
bVal2 = false;
}
//합 계산
sum = num1 + num2;
//올림수 덧셈
if (UpPoint)
{
sum += 1;
UpPoint = false;
}
//합한 값이 10 이상일때 올림수를 설정
if (sum >= 10)
{
printf("%d : UpPoint\n", sum);
sum -= 10;
UpPoint = true;
}
//값 설정
AnswerTemp->val = sum;
if (!bVal1 && !bVal2)
{
//두 수가 마지막 노드 일때 올림수가 있으면 처리
if (UpPoint)
{
AnswerTemp->next = new ListNode(1);
}
break;
}
//노드 추가
AnswerTemp->next = new ListNode();
AnswerTemp = AnswerTemp->next;
++count;
}
return answer;
}
};
결과
Runtime: 52 ms, faster than 11.77% of C++ online submissions for Add Two Numbers.
Memory Usage: 71.6 MB, less than 42.53% of C++ online submissions for Add Two Numbers.
반응형
'코딩테스트 > 리트코드' 카테고리의 다른 글
[리트코드 / LeetCode] 8. String to Integer (atoi) 풀이 - python3 (0) | 2021.01.01 |
---|---|
[리트코드 / LeetCode] 7. Reverse Integer 풀이 - python3 (0) | 2021.01.01 |
[리트코드 / LeetCode] 6. ZigZag Conversion 풀이 - C++ (0) | 2021.01.01 |
[리트코드 / LeetCode] 4. Median of Two Sorted Arrays 풀이 - C++ (0) | 2020.12.30 |
[리트코드 / LeetCode] 3. Longest Substring Without Repeating Characters 풀이 - C++ (0) | 2020.12.30 |
Comments