티스토리 뷰

10757번: 큰 수 A+B
https://www.acmicpc.net/problem/10757
#include <iostream>
#include <string>
using namespace std;

int main()
{
    string inputA;
    string inputB;
    
    cin >> inputA >> inputB;
    
    int inputALength = inputA.size();
    int inputBLength = inputB.size();
    
    int forloopSize = 0;
    
    string result;
    
    if(inputALength > inputBLength) forloopSize = inputALength;
    else forloopSize = inputBLength;
    
    int ten = 0;
    
    for(int i =0; i < forloopSize; i++)
    {
        string a = "0";
        string b = "0";
        
        if(inputALength -1-i >= 0 )
        {
            a = inputA[inputALength - 1 - i];
            
        }
        if(inputBLength -1-i >= 0)
        {
            b = inputB[inputBLength-1-i];
        }
        
        int intA =0;
        int intB = 0;
        
        
        intA = stoi(a);
        intB = stoi(b);
        
        int intC = intA+intB+ten;
        
        int intresult = intC % 10;
        ten = intC/10;
        
        result = to_string(intresult) + result;
    }
    
    if(ten ==1) 
    {
        result = '1' + result;
    }
    
    cout << result;
}
메모리 (KB)시간 (ms)코드 길이 (B)
202441110

🤔 다시 풀어보기

우선 이 문제는 다른 분이 거의 풀어주시다시피 한 문제이기 때문에 코드에 대한 완전한 이해, 기존 코드를 보지 않고도 다시 풀어내고 싶다. 그래서 오늘 안에 페이지를 갱신할 예정이다.

또, 지금 코드는 구현을 우선하는 코드이기 때문에 더 알아보기 쉽고 직관적인 코드로 다시 짜볼 예정이다.

추가로 이 문제에도 C 입출력과의 연결을 끊는 코드를 넣었을 때 시간에 차이가 있는지 확인도 해보고 싶다.

➕ 재풀이

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string inputA;
	string inputB;

	cin >> inputA >> inputB;

	int inputASize = inputA.size();
	int inputBSize = inputB.size();

	string result;
	int resultLength = (inputASize > inputBSize) ? inputASize : inputBSize;

	int checkOverTen = 0;

	for (int i = 0; i < resultLength; i++)
	{
		string a;
		string b;
		int sum = 0;

		if (inputASize - 1 - i >= 0) a = inputA[inputASize - 1 - i];
		else a = "0" + a;
		if (inputBSize - 1 - i >= 0) b = inputB[inputBSize - 1 - i];
		else b = "0" + b;

		sum = stoi(a) + stoi(b) + checkOverTen;

		int extra = sum % 10;
		checkOverTen = sum / 10;

		result = to_string(extra) + result;
	}

	if (checkOverTen == 1) result = '1' + result;

	cout << result;
}

다시 풀었지만 for문에서 계속 형변환 하는 게 신경 쓰인다. reverse 함수를 만들어 입력 받은 두 값을 뒤집은 후 계산하는 방법도 있던데 다음에는 그렇게 풀어봐야겠다.

덧붙여

	if (inputASize - 1 - i >= 0) a = inputA[inputASize - 1 - i];
	else a = "0" + a;
	if (inputBSize - 1 - i >= 0) b = inputB[inputBSize - 1 - i];
	else b = "0" + b;
else가 없으면 런타임 에러가 나온다.

이렇게 적은 이유는, inputA의 길이가 inputB보다 길면 B에서는 A에 대응할 값이 없기 때문에 오류가 난다. 그래서 대응할 값을 만들어주기 위해 0을 넣어주었다.


Uploaded by N2T

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
«   2025/07   »
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 31
링크
Total
Today
Yesterday