반응형
답
#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()'를 사용해서 처음부터 끝까지 역순을 배치할 수 있다.
끝
반응형
'c++ > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 세 개의 구분자(c++) (2) | 2024.01.13 |
---|---|
[프로그래머스] 공백으로 구분하기 2(c++) (0) | 2024.01.13 |
[프로그래머스] 정수를 나선형으로 배치하기(c++) (0) | 2024.01.13 |
[프로그래머스] 그림 확대(c++) (0) | 2024.01.12 |
[프로그래머스] 문자열 정수의 합(c++) (0) | 2023.12.27 |