알파벳 소문자로만 이루어진 단어가 주어진다. 이때, 이 단어가 팰린드롬인지 아닌지 확인하는 프로그램을 작성하시오.
팰린드롬이란 앞으로 읽을 때와 거꾸로 읽을 때 똑같은 단어를 말한다.
level, noon은 팰린드롬이고, baekjoon, online, judge는 팰린드롬이 아니다.
예제 입력 1
level
예제 출력 1
1
a = list(str(input())) if list(reversed(a)) == a: print(1) else: print(0)
리스트로 바꿔준 후 reversed를 사용해서 뒤집어 준다. 만약 같으면 1 아니면 0을 프린트한다.
두번째 문제는
두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오.
예제 입력 1
24 18
예제 출력 1
6
72
a, b = map(int, input().split()) def gcd(a, b): while b > 0: a, b = b, a % b return a def lcm(a, b): return a * b // gcd(a, b) print(gcd(a, b)) print(lcm(a, b))
유클리드 호제법을 이용해서 문제를 해결할 수 있었다.
유클리드 호제법은 최대공약수를 쉽게 구할 수 있는 알고리즘 중의 하나이다.두 수 a와 b (a > b)가 있다고 할 때, a와 b의 최대공약수 G는 b와 a%b의 최대공약수와 서로 같다.
gcd(24, 18) = gcd(18, 6) = gcd(6, 0)이다.
b가 0이되는 순간 a가 최대공약수가 된다.
최대공약수가 존재한다면 최소공배수는 바로 구할 수 있다. 여기서 두 수 A와 B가 있다고 할 때, A와 B는 각각 X x gcd(a, b), Y x gcd(a, b)이다. 따라서 A*B/gcd(a, b)를 해주면 최소공배수가 된다. 이 수를 A로 나눠도 나누어 떨어지고 B로 나눠도 나누어떨어지는 수 중에서 가장 작은 수이기 때문이다.