Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
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
Archives
Today
Total
관리 메뉴

hwooo

프로그래머스 (C/C++) 181846 : 두 수의 합 본문

Study/Algorithm

프로그래머스 (C/C++) 181846 : 두 수의 합

hwooo 2023. 7. 3. 03:31

풀이

처음엔 a와 b의 길이에 따라 경우를 나눠서 계산했는데, 다른 분의 풀이 중 길이를 맞춰서 계산하는 게 훨씬 코드가 깔끔해서 그 방식으로 바꿔서 풀었다.

 

먼저 문자열을 뒤집어 0번째 인덱스부터 계산하고자 했다. 이 때 짧은 문자열에 '0'을 넣어 긴 문자열과의 길이를 맞췄다.먼저 한 자리씩 정수형으로 계산했고, 이를 10 이하의 수로 만들어 정수형 배열에 저장했다.해당 배열을 문자열로 바꿔 저장했고, 이를 뒤집어 출력했다.

코드

#include <string>
#include <vector>
#include <algorithm>
using namespace std;

string solution(string a, string b) {
    string answer = "";
    vector<int> S;
    
    int la = a.size(), lb = b.size();
    
    // 길이 맞춰주기
    reverse(a.begin(), a.end()); reverse(b.begin(), b.end());
    if(lb > la) swap(a,b), swap(la,lb);
    for(int i = lb; i < la; i++) b += '0';

    // 계산한 값을 정수형으로 저장
    int c = 0;
    for(int i = 0; i < la; i++){
        int sum = a[i]-'0' + b[i]-'0' + c;
        c = sum/10;
        S.push_back(sum%10);
    }
    if(c!=0) S.push_back(c);
    
    // 문자열로 변환
    for(int i = 0; i < S.size(); i++) answer += (S[i] + '0');
    reverse(answer.begin(), answer.end());
    return answer;
    
}