본문 바로가기
c++/프로그래머스

[프로그래머스] 두 수의 합(c++)

by ilp 2024. 1. 13.
반응형


#include <bits/stdc++.h>

using namespace std;

string solution(string a, string b) {
    string answer;
    int carry=0;
    int temp;
    
    if(a.size()>b.size()){
        b.insert(0,a.size()-b.size(),'0');
    }
    else if(a.size()<b.size()){
        a.insert(0,b.size()-a.size(),'0');
    }
    
    for(int i=a.size()-1;i>=0;i--){
        temp=(a[i]-'0')+(b[i]-'0')+carry;
        carry=temp/10;
        answer.push_back((temp%10)+'0');
    }
    if(carry>=1){
        answer.push_back(carry+'0');
    }
    
    reverse(answer.begin(),answer.end());
    return answer;
}

1. 변수

  • 'answer': 최종적으로 반환될 문자열이며 두 수의 합을 저장한다.
  • 'carry': 올림수를 나타내는 변수이다.
  • 'temp': 중간 계산 값을 임시로 저장하는 변수이다.

2. 문자열 길이 조정

  • 두 문자열 'a'와 'b'의 길이가 다르면
    더 짧은 문자열의 앞에 '0'을 추가하여 길이를 맞춰준다.
  • 각 자릿수를 더할때 인덱스를 맞춰주기 위해서이다.

3. 뒤에서부터 각 자리수 덧셈

  • 문자열의 끝에서 시작해서 각 자릿수를 더한다.
    (a[i]-'0' 는 문자를 정수로 변환한다.)
  • 'temp': 현재 자리수의 합과 이전 자릿수에서의 올림을 더한 값이다.
  • 'carry': 현재 자릿수의  올림값이다. ('temp'를 10으로 나눈 몫)
  • 'answer': 각 자릿수의 합(10으로 나눈 나머지)을 문자로 변환하고 추가한다.
    ( (temp%10)+'0' 은 정수를 문자로 변환한다.)

4. 마지막 자릿수

  • 모든 덧셉을 마치고, 남아있는 올림수가 있으면 answer에 추가해준다.
    ( carry+'0' 은 정수를 문자로 변환한다.)

5. 결과 문자열 뒤집기

  • 덧셈을 할때 자릿수를 거꾸로 더했기 때문에
    최종결과를 정상 순서로 뒤집어주어야 한다.
  • 'reverse'함수를 사용했다.

6. 결과

  • 문자열 answer을 반환한다.

참고

이번 문제에서

문자를 숫자로 숫자를 문자로 바꿀때 '0'을 빼거나 더했다.

  • temp%10 결과에 문자 '0'(ASCII 코드로 48)을 더하여 ASCII 코드상의 해당 숫자 문자를 얻는다..
  • 이는 숫자를 그에 해당하는 문자로 변환하는 방법이다.. 예를 들어,temp%10이 4일 경우, 4+'0'은 4+48이 되어 ASCII 코드로 숫자 4에 해당하는 문자 '4'(ASCII 코드로 52)를 얻는다..

'insert' 함수

  • 주로 vector에 새로운 요소를 추가할 때 사용한다.
vec.insert(삽입 위치 반복자,삽입 개수,삽입할 값);
a.insert(0,b.size()-a.size(),'0');

- '삽입 위치의 반복자와', '삽입 개수', '삽입할 값'을 받아서 삽입해준다.

- 0부터 'b.size()-a.size()'개 만큼 0을 넣어준다. 이렇게 하면 'a'문자열을 'b'문자열의 길이와 같게 만들 수 있다.

 

'reverse' 함수

  • 주어진 범위의 요소들을 역순으로 배치한다.
  • '<agorithm>' 해더파일에 있음
reverse(시작 반복자, 끝 반복자);
reverse(answer.begin(),answer.end());

- '시작 반복자''끝 반복자'는 역순으로 배치할 범위를 정한다.

- 'begin()'과 'end()'를 사용해서 처음부터 끝까지 역순을 배치할 수 있다.


반응형