57일차

양진혁·2021년 12월 29일
0

문제풀이

알파벳 소문자로만 이루어진 단어가 주어진다. 이때, 이 단어가 팰린드롬인지 아닌지 확인하는 프로그램을 작성하시오.

팰린드롬이란 앞으로 읽을 때와 거꾸로 읽을 때 똑같은 단어를 말한다.

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로 나눠도 나누어떨어지는 수 중에서 가장 작은 수이기 때문이다.

0개의 댓글