만족은 하되 안주하지는 말자

기록해야 기억한다

프로그래밍/programmers&bj

[C++][알고리즘] 백준 1252번 이진수 덧셈

D36choi 2020. 3. 11. 22:52
728x90

삽질을 매우 많이 한 문제.

체크해야할 사항들은

1. 2진수 -> 10진수 -> 2진수 변환하는 방식으로는 풀 수 없다. 이유는 주어지는 2진수가 80자 까지 가능하기 때문.

long long 을 써도 표현 불가능한 범위다.

2. 0 + 0 은 null이 아니라 0이다. 당연한 얘기겠지만 알고리즘만 신경쓰다보니 0을 출력하는 예외를 두지 않았다.

3. 00000 이나 000001 이 가능하다. 미리 필요없는 0은 제거해주는 것이 만들기에 도움이 된다.

매우 헤맨 부분이 0을 제거하는 부분인데

string 의 erase() 메소드를 활용했지만 for문을 이용해선 해당 index i 를 erase하는건 사실상 이치에 맞지 않는다.

만약 string "00001" 에서 0을 4개 지우려 할때

*조건문을 이용해 if(a[i]=='0') 일때 erase 한다고 생각하게 되면 맨처음의 0을 지우는 순간 index 1이었던 2번째 0은 *

index 0의 첫번째 0이 되기 때문이다. erase 를 할때마다 string 은 동적으로 index가 변경된다.

고쳐야 할 부분

carry 는 굳이 stack 일 필요없다. 그냥 bool 변수로도 가능하다. 쓸데없이 복잡하게 만들 필요가 없었다.
계산하는 부분을 bin 함수로 분리한거 치고 코드가 전혀 짧아지지않았다.