파이썬 알고리즘 159번 | [백준 2609번] 최소공배수, 최대공약수

Yunny.Log ·2022년 5월 30일
0

Algorithm

목록 보기
162/318
post-thumbnail

159. 최소공배수, 최대공약수

1) 어떤 전략(알고리즘)으로 해결?

2) 코딩 설명

<내 풀이>


import sys
a,b=map(int,sys.stdin.readline().split())

alis=[]
blis=[]

for i in range(1,a+1) :
    if a%i==0:
        alis.append(i)

for i in range(1,b+1) :
    if b%i==0:
        blis.append(i)

if (set(alis)&set(blis)) :
    maxyaksu = (max(set(alis)&set(blis)))
else :
    maxyaksu=0

print(int(maxyaksu))
print(int(maxyaksu*(a//maxyaksu)*(b//maxyaksu)))

<내 틀렸던 풀이, 문제점>


import sys
a,b=map(int,sys.stdin.readline().split())

alis=[]
blis=[]

for i in range(2,a+1) :
    if a%i==0:
        alis.append(i)

for i in range(2,b+1) :
    if b%i==0:
        blis.append(i)


maxyaksu = (max(set(alis)&set(blis)))

print(int(maxyaksu))
print(int(maxyaksu*(a//maxyaksu)*(b//maxyaksu)))

=> 바로바로 합집합이 없는 경우를 고려하지 않았기 때문! wow

ㅋㅋㅋ 그리고 약수는 1부터 있다

  • 나는 범위를 2로 해서 항상 약수로 1 존재하는데 그걸 생각을 못했다 요말이야

<반성 점>

  • 예외처리를 잘하자

<배운 점>

  • set으로 교집합(&), 차집합(-) 다 구현 가능하다!
  • 파이썬 math 라이브러리 안에 최소공배수, 최대공약수 알려주는 것 존재,,!
import math

a, b = map(int, input().split())

print(math.gcd(a, b))
print(math.lcm(a, b))

쉬운 문제라도 항상 배울 점이 존재한다, 감사하다

0개의 댓글