[BOJ] 10757๋ฒˆ | ํฐ ์ˆ˜ A+B (C++)

2023. 4. 8. 03:14ใ†Coding Test/BOJ

๐Ÿ”—๋ฌธ์ œ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ

 

๋ฌธ์ œ ์„ค๋ช…

๋‘ ์ •์ˆ˜ A์™€ B๋ฅผ ์ž…๋ ฅ๋ฐ›์€ ๋‹ค์Œ, A+B๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 


์ž…๋ ฅ

์ฒซ์งธ ์ค„์— A์™€ B๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (0 < A,B < 1010000)

 


์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— A+B๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 


์˜ˆ์ œ ์ž…์ถœ๋ ฅ

 


ํ’€์ด ์ „๋žต

์ž…๋ ฅ ๋ฒ”์œ„๊ฐ€ ๋ณด์‹œ๋‹ค์‹œํ”ผ, ๋ง๋„ ์•ˆ ๋˜๊ฒŒ ํฐ ์ˆซ์ž์ž…๋‹ˆ๋‹ค. Java๋Š” BigInteger ํด๋ž˜์Šค๊ฐ€, Python์€ ์‹ฌ์ง€์–ด ๊ทธ๋ƒฅ ํ•ด๋„ ๋˜๋Š”๋ฐ, C++์€ ์™œ ์•ˆ ๋ผ์š”...? unsigned long long ์ž๋ฃŒํ˜•์œผ๋กœ๋„ ์ปค๋ฒ„ํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ, ๋ฌธ์ž์—ด(string)๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ํ’€์–ด์•ผ๊ฒ ๋‹ค ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์˜ํ•ด์•ผ ํ•  ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋‘ ์ˆ˜์˜ ๊ฐ€์žฅ ๋’ท์ž๋ฆฌ๋ถ€ํ„ฐ ์„œ๋กœ ๋”ํ•˜๋˜, carry ์ฒ˜๋ฆฌ๋ฅผ ์ž˜ํ•ด์ค˜์•ผ ํ•œ๋‹ค. (๋งค์šฐ ์ค‘์š”)
  • ๋‘ ์ˆ˜์˜ ์ž๋ฆฟ์ˆ˜๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅผ ๊ฒฝ์šฐ, ๋” ๊ธด ์ˆ˜์˜ ์•ž ๋ถ€๋ถ„์„ ๊ทธ๋Œ€๋กœ ๋„ฃ์–ด์ค€๋‹ค.

 

์ฒ˜์Œ์—๋Š” Iterator๋ฅผ ํ†ตํ•ด ์ ‘๊ทผ์„ ํ–ˆ์ง€๋งŒ, carry ์ฒ˜๋ฆฌํ•˜๊ธฐ๊ฐ€ ์• ๋งคํ–ˆ๊ณ , ๋‹ค๋ฅธ ๋ถ„๋“ค์˜ ํ’€์ด๋ฅผ ์กฐ๊ธˆ ์ฐธ๊ณ ํ•˜์—ฌ ํ’€์—ˆ์Šต๋‹ˆ๋‹ค.

 


์†Œ์Šค ์ฝ”๋“œ ๋ฐ ๊ฒฐ๊ณผ

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

int main()
{
	string num1, num2;
	cin >> num1 >> num2;

	string answer(max(num1.size(), num2.size()), '0');
	bool carry = false;

	for (int i = 0; i < answer.size(); i++)
	{
		int sum = 0;

		if (i < num1.size())
			sum += num1[num1.size() - i - 1] - '0';
		if (i < num2.size())
			sum += num2[num2.size() - i - 1] - '0';

		sum += carry;

		carry = sum / 10;
		answer[answer.size() - i - 1] = sum % 10 + '0';
	}

	if (carry)
	{
		answer.insert(answer.begin(), carry + '0');
	}

	cout << answer;
	return 0;
}

์™œ ์•ˆ ๋ผ๋ƒ๋ฉด์„œ ํ™”๋‚ด๋ฉฐ ์ฝ”๋”ฉํ–ˆ๋˜ ํ”์ ...

 

728x90
๋ฐ˜์‘ํ˜•