문제 링크

문제

  • 두 정수 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

코드