2019. 10. 11. 20:20
728x90

문제 번호: 15740

문제 제목: A+B - 9

문제 주소: https://www.acmicpc.net/problem/15740


문제 내용

입력받은 두 수 A, B를 합한 결과를 출력한다.


테스트 케이스

1 2

3

-60 40

-20

-999999999 1000000000

1

1099511627776 1073741824

1100585369600

123456789123456789123456789 987654321987654321987654321

1111111111111111111111111110


문제 풀이

 문자열로 입력 받아서 덧셈을 하는 코드를 짠다. 주의사항은 아래와 같다.
 - 양수에는 부호가 없지만, 음수에는 - 부호가 있다.
 - 부호가 같으면 덧셈, 부호가 다르면 뺄셈을 한다.
 - 0은 항등원이므로 입력값에 0이 포함되는 경우에는 연산을 할 필요가 없다.

 일단 양수, 0에는 부호가 없으므로 이런 숫자가 입력으로 들어오면 앞에 +를 붙여준다.

 덧셈은 각 자리를 합한 뒤 10이 넘으면 다음 자리에 +1을 하고, 현재 자리에 10을 빼기만 하면 된다.
 뺄셈은 계산 결과에 따라 추가적으로 처리해야 할 것들이 있다.내 경우에는 아래와 같은 순서로 진행하였다.
 1. 음수인 배열의 각 자리에 -1을 곱한다.
 2. A와 B의 각 자리를 합한다.
 3. 합한 결과의 맨 앞이 0인 경우 0이 아닌 수가 나올 때까지 제거한다.
 4. 맨 앞의 수가 0보다 작은 경우 부호를 -로 하고 각 자리에 -1을 곱한다. 아닌 경우에는 부호를 +로 한다.
 5. 일의 자리부터 시작하여 0보다 작은 경우 앞의 자리 수를 1 빼고, 현재 자리 수에 +10을 한다.
 6. 조정 후 3.의 처리를 추가로 진행한다.

마지막으로 결과 출력이 char로 이루어지므로 각 자리에 '0'을 더해줘 정상적으로 출력될 수 있게 하고, 부호가 +일 경우 이를 제거해준다.


2019. 11. 05 - 0에 대한 예외처리 추가
 기존: 값이 0일 때도 연산 진행
 변경: 입력 값에 0이 포함되는 경우 다른 값을 반환

2019. 10. 21 - 앞에 위치한 0 제거 코드 수정
 기존: 맨 앞이 0인지 확인하여 erase. 0의 개수만큼 erase 함수 반복.
 변경: 맨 앞이 0일 경우 연속으로 0이 나오는 수량을 확인하여 범위 삭제. erase 함수는 1회만 실행하는 대신 연속으로 확인하는 과정에서 for문이 돌아감


풀이 코드


728x90

'공부 > 문제풀기' 카테고리의 다른 글

팩토리얼에서 끝에 붙는 0의 개수 구하기  (0) 2020.06.19
백준 10953 - A+B - 6  (0) 2019.10.11
프로젝트 오일러 문제 19  (0) 2019.10.08
백준 2558 - A+B - 2  (0) 2019.09.24
백준 2156 - 포도주 시식  (0) 2019.08.26
Posted by 아야카