본문 바로가기
코딩테스트 문제풀이(Python)

백준 1357번 문제풀이 (파이썬)

by chanfficial 2022. 5. 20.

1357. 뒤집힌 덧셈

 

 

어떤 수 X가 주어졌을 때, X의 모든 자리수가 역순이 된 수를 얻을 수 있다. Rev(X)를 X의 모든 자리수를 역순으로 만드는 함수라고 하자. 예를 들어, X=123일 때, Rev(X) = 321이다. 그리고, X=100일 때, Rev(X) = 1이다.
두 양의 정수 X와 Y가 주어졌을 때, Rev(Rev(X) + Rev(Y))를 구하는 프로그램을 작성하시오

 

 

입력 : 첫째 줄에 수 X와 Y가 주어진다. X와 Y는 1,000보다 작거나 같은 자연수이다.

출력 : 첫째 줄에 문제의 정답을 출력한다.

 

 

ex)

입력1 :

123 100

출력1 :

223

 

입력2 :

5 5

출력2 :

1

 

 

 

 

 

풀이

x, y = input().split()

x = int(x[::-1])
y = int(y[::-1])

print(int(str(x+y)[::-1]))

- 먼저 x, y를 입력받는다. x, y를 역순으로 만들기 위해 슬라이스를 사용하는데, 이는 시퀀스 자료형에만(리스트, 튜플, 문자열 등등) 적용되기 때문에 정수형으로 입력받지 않았다.

슬라이스를 사용할 때 인덱스 증가폭을 음수로 지정하면 요소를 뒤에서부터 가져올 수 있는데, 이를 이용하여 입력받은 문자열 x, y를 각각 역순으로 만들었다. 그리고 나서 역순으로 만든 x, y를 더한 값을 다시 역순으로 만들어 출력하는 문제이기 때문에 x와 y를 더할 수 있도록 정수형으로 변환해주었다.

 

이제 x, y는 모두 정수형이 되었는데, x와 y를 더한 값을 슬라이스를 사용해 다시 역순으로 바꿔야 한다.

위의 과정에서 설명했듯이 슬라이스는 시퀀스 자료형에만 적용되기 때문에, x+y 값을 str()을 사용하여 문자열로 변환한 뒤에 슬라이스를 사용하여 역순으로 변경했다.

 

이 값을 출력하면 답이 나올 것 같지만, 두 번째 예제를 보면 5 + 5 = 10 이고 이를 역순으로 바꾸면 01 이 출력되는 오류가 발생한다.

이런 경우에 01이 아닌 1을 출력하기 위해 다시 int()를 사용하여 해당 값을 정수형으로 변환한 뒤 출력했다.