Java) BOJ 10757. 큰 수 A+B
문제 링크
문제
- 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
제한
- 시간 제한 : 1 초
- 메모리 제한 : 256 MB
입력
- 첫째 줄에 A와 B가 주어진다. (0 < A,B < 1010000)
출력
- 첫째 줄에 A+B를 출력한다.
👀 풀이
- 브론즈5였는데 브론즈가 아닌데…ㅠ
- c/c++로만 푸는 같은 문제도 있는데 그건 난이도가 실버3인거 보니까 어려운 문제가 맞는거 같다.
- 쉽게 책정된 이유는 파이썬은 그냥 계산해줘서 그렇다고 하는데… 정말 쉽지 않은 문제였다 ㅠㅠ
-
풀이와 코드의 흐름 자체는 비교적 빨리 생각해 냈지만 자잘한 예외 케이스에 걸려서 많이 틀렸다.
- 입력으로 들어오는 A, B는 long형을 써도 표현범위를 초과하기 때문에 정수를 저장하는 자료형으로 연산을 할 수 없고 다른 방법으로 해결해야 한다.
- c/c++이었으면 unsigned long long형으로 해결할 수도 있다는 글을 봤는데 자바에는 없는 것 같다.
- 자바는 부호가 있는 정수만 저장할 수 있나?(이거 쓰고 찾아보기)
-
찾아본 결과는 [Java] 부호없는 자료형이 없는 자바 인데 그냥 자료없는 부호형 만들어주지… 자바는 귀찮은 게 참 많은 것 같다.
- 그래서 입력으로 들어오는 숫자를 문자열로 받은 뒤 두 문자열의 맨 뒤에서부터 앞으로 이동하면서 두 수를 int형으로 바꿔 더한 뒤
-
계산한 수를 다시 char로 바꿔 스택에 저장하고 만약 10이 넘어가면 다음 자리수를 계산할 때 계산 결과에 1을 더해주도록 했다.
- 그리고 두 문자열의 길이가 다를 수 있기 때문에 두 문자열 중 더 짧은 문자열의 길이만큼만 위 연산을 하고
- 만약 다음 자리수에 1을 더해줘야 한다면 남은 숫자들 중 마지막 자리수에 1을 더해주고 스택에 넣고
- 더 긴 문자열의 앞에 계산되지 않고 남은 숫자들을 정답 문자열 변수에 넣어준 다음
-
아까 더한 숫자들을 저장해 놓은 스택에서 하나씩 꺼내서 합쳐주었다.
- 자세한 것은 코드 옆 주석에…
☑️ 결과
- 메모리 : 14208 kb
- 시간 : 132 ms