-
[백준 알고리즘] C++ | 10757번 큰 수 A+BAlgorithm 2022. 8. 19. 01:10
자바스크립트에서 문자열로 구성된 숫자들을 정렬하려고 했는데, bigint 로 바뀌어 정확히 계산될 수 없는 경우도 있다고 한다. 따라서 본 문제를 c++ 로 구현하여, 실제로 어떤식으로 계산이 이뤄지는지 알아보고자 했다.
- 처음엔 단순히 더하기인데, 왜 복잡한 알고리즘까지 적용되는건가(?)라는 생각이 들었다. 하지만 이내 컴퓨터가 어떤 시퀀스와 로직을 가지고 (성능까지 고려하여) 처리할 수 있도록 하는게 '개발자'였구나 라는 깊은 깨달음이...
- 자바스크립트, 파이썬으로 해치우듯 문제만 해결했더니 그 함수들이 실제로 어떻게 구현되었고, 동작하는지 간과하고 있었던 부분이 컷다.
https://www.acmicpc.net/problem/10757
문제
풀이 및 제출코드
- 처음에 문제에서 주어진 숫자들을 입력 받아야 했는데, int 타입으로는 약 21억 정도로 제한이 있었다. 그 외 long long 은 더 여유가 있긴 했지만, 다른 예시들을 참고하여 string으로 입력 받고 숫자로 변환하여 계산해 주었다.
- 이 문제는 사람의 생각대로 접근하자면, 초등학교 때 처음 사칙연산을 배우듯 위, 아래 각각 숫자를 써놓고 10보다 클 경우 앞에 1을 올려주듯이 풀면되는 것이었다.
- 이 문제의 핵심은 타입에 맞게 숫자를 입력받고, 일의 자리 숫자부터 앞으로 가며 연산을 진행하고 이렇게되면 이 숫자들이 앞에서부터 문자열로 이어진다. 때문에 마지막에 출력할 때는 뒤에서부터 출력해주면 문제에서 요구하는대로 결과를 도출할 수 있다.
- 참고로 올림은 carry 라는 변수명으로 많이 쓰는거 같고(모두가 아는 변수명으로...), reverse라는 함수도 사용할 수 있으나 성능은 기본 for 문을 사용하는 것이 더 좋은 것 같다.
[데이터 타입에 대한 개념]
https://melonicedlatte.com/algorithm/2018/03/04/022437.html
'Algorithm' 카테고리의 다른 글
[프로그래머스] JavaScript | 가장 가까운 같은 글자 (0) 2023.01.08 [프로그래머스] JavaScript | 크기가 작은 부분 문자열 (0) 2023.01.08 [프로그래머스] JavaScript | 올바른 괄호 (스택) (0) 2022.08.17 [프로그래머스] JavaScript | 숫자 문자열과 영단어 (0) 2022.08.15 [백준 알고리즘] C++ | 0912번 괄호 더하기 (0) 2022.07.06