본문 바로가기

BOJ/Python

[BOJ/백준] 3062 - 수 뒤집기 (Python)

문제

문제링크

각 테스트 케이스에 대해서 원래 수와 뒤집은 수를 합한 수가 좌우 대칭이 되는지 테스트하라.

 

풀이

입력받은 수와 뒤집은 수의 합을 구하는 함수 sum_num_and_reverse()를 작성한다.

이 때 str로 입력받아야 뒤집기 쉬우므로 num의 type은 str이어야 한다.

num[::-1]로 reverse한 후, 원래 수와 이 수를 int형으로 바꿔 더한 후 다시 str형으로 바꿔 return하는 함수이다.

이후 좌우대칭인지 판단하는 is_palindrome() 함수를 작성한다.

좌우대칭이기 위해서는 원래 수와 뒤집은 수가 완전히 일치하면 된다.

이제 두 수의 합이 좌우대칭인지 판단하는 symmetry() 함수를 자것ㅇ한다.

sum_num_and_reverse() 함수를 불러와 합을 tot에 저장한다. 이때 type은 str이다.

is_palindrome 함수를 불러와 tot을 넣었을 때 True이면 'YES', 아니면 'NO'를 return한다.

위는 각 테스트케이스에서 사용할 함수들을 정의한 것이다.

이제부터는 값을 입력받아 함수에 넣은 후 결과를 출력하게 된다.

str형으로 입력을 받고 이 값을 symmetry() 함수에 넣는다.

symmerty 함수에서 맨 위의 두 함수를 사용하게 되고, 결국 합의 좌우대칭에 대한 결과가 print된다. 

 

코드

def sum_num_and_reverse(num):
    num_reverse = num[::-1]
    total = str(int(num) + int(num_reverse))
    return total

def is_palindrome(s):
    return s == s[::-1]
    
def symmetry(num):
    tot=sum_num_and_reverse(num)
    return "YES" if is_palindrome(tot) else "NO"
    
t=int(input())
for _ in range(t):
    num=input()
    print(symmetry(num))