본문 바로가기
Algorithm

[백준 알고리즘] C++ | 10757번 큰 수 A+B

by Baest 2022. 8. 19.

자바스크립트에서 문자열로 구성된 숫자들을 정렬하려고 했는데, bigint 로 바뀌어 정확히 계산될 수 없는 경우도 있다고 한다. 따라서 본 문제를 c++ 로 구현하여, 실제로 어떤식으로 계산이 이뤄지는지 알아보고자 했다.

 

- 처음엔 단순히 더하기인데, 왜 복잡한 알고리즘까지 적용되는건가(?)라는 생각이 들었다. 하지만 이내 컴퓨터가 어떤 시퀀스와 로직을 가지고 (성능까지 고려하여) 처리할 수 있도록 하는게 '개발자'였구나 라는 깊은 깨달음이...

- 자바스크립트, 파이썬으로 해치우듯 문제만 해결했더니 그 함수들이 실제로 어떻게 구현되었고, 동작하는지 간과하고 있었던 부분이 컷다.

 

https://www.acmicpc.net/problem/10757

 

10757번: 큰 수 A+B

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

www.acmicpc.net

 

 

문제

 

풀이 및 제출코드

- 처음에 문제에서 주어진 숫자들을 입력 받아야 했는데, int 타입으로는 약 21억 정도로 제한이 있었다. 그 외 long long 은 더 여유가 있긴 했지만, 다른 예시들을 참고하여 string으로 입력 받고 숫자로 변환하여 계산해 주었다.

- 이 문제는 사람의 생각대로 접근하자면, 초등학교 때 처음 사칙연산을 배우듯 위, 아래 각각 숫자를 써놓고 10보다 클 경우 앞에 1을 올려주듯이 풀면되는 것이었다. 

- 이 문제의 핵심은 타입에 맞게 숫자를 입력받고, 일의 자리 숫자부터 앞으로 가며 연산을 진행하고 이렇게되면 이 숫자들이 앞에서부터 문자열로 이어진다. 때문에 마지막에 출력할 때는 뒤에서부터 출력해주면 문제에서 요구하는대로 결과를 도출할 수 있다.

- 참고로 올림은 carry 라는 변수명으로 많이 쓰는거 같고(모두가 아는 변수명으로...), reverse라는 함수도 사용할 수 있으나 성능은 기본 for 문을 사용하는 것이 더 좋은 것 같다.

 

 

[데이터 타입에 대한 개념]

https://melonicedlatte.com/algorithm/2018/03/04/022437.html

 

C/C++ 에 존재하는 모든 자료형 개념 총 정리 - Easy is Perfect

알고리즘 문제 풀이 시에, 모르는 게 많이 생기게 됩니다. 특히 자료형에 대한 게 많이 헷갈리는 경우가 존재합니다. 어떤 문제는 long long 자료형을 써야할 때가 있고 (int 형의 범위를 초과해서)

melonicedlatte.com