프로그래머스 - 두 수의 합 - C++ Python
프로그래머스 두 수의 합 문제 바로가기 Python이나 Java의 경우 이 문제는 매우 쉽다. 숫자의 크기가 매우 커도 처리할 수 있기 때문에… def solution(a, b): return str(int(a) + int(b)) 하지만 C++의 경우 long long 8byte가 최대다. 더 확장하고 싶으면 BigInteger을 직접 구현해야하는데, 문제 푸는데 언제 다 구현하고 앉아있어…!! 이 문제의 경우 숫자의 길이가 최대 100,000자리이기 때문에 일반적인 연산으로는 계산이 불가하다. 그래서 마치 우리가 세로셈으로 손계산하듯이 (초등학교 세자리수 덧셈마냥) 올림을 고려하면서 한 자리씩 계산하도록 구현했다. 내 풀이 #include <string> #include <vector> #include <algorithm> using namespace std; string solution(string a, string b) { string ans = ""; reverse(a.begin(), a.end()); reverse(b.begin(), b.end()); if (a.size() < b.size()){ a.resize(b.size(), '0'); } else { b.resize(a.size(), '0'); } // a[i] + b[i] = 10*p + q int p = 0; for (int i=0; i<a.size(); i++){ int cur = (a[i] - '0') + (b[i] - '0') + p; ans += to_string(cur%10); p = cur/10; } if (p != 0){ ans += to_string(p); } reverse (ans.begin(), ans.end()); return ans; } 일의 자리에서부터 계산하기 위해서 reverse() 함수를 사용해서 뒤집어주고 차례대로 연산해 나간다. 이때 올림이 있는 경우를 대비해서 p(10으로 나눈 몫)에 저장해두고 다음 연산 때 꺼내서 사용한다. ...