Algorithm Study/Python

[백준 파이썬] #2609 최대공약수와 최소공배수

728x90
반응형

Silver V

# 2609 최대공약수와 최소공배수

https://www.acmicpc.net/problem/2609

 

2609번: 최대공약수와 최소공배수

첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.

www.acmicpc.net

 

 

풀이

lis = list(map(int, input().split()))
lis2 = []

for i in lis:
    for j in range(i+1):
        try:
            if i/j - i//j ==0:
                lis2.append(j)
        except:
            pass
    print(lis2)
    lis2 = []

# for 구문으로 만들어진 변수를 다른 변수로 저장하고 싶은데 방법이?

24 18을 기입했을 때 [1, 2, 3, 4, 6, 8, 12, 1, 2, 3, 6, 9, 18]과 같이 나오게 된다.

for 구문을 돌릴 때마다 새로운 이름의 변수로 따로 저장될 수 있다면.. 하고 공빅데 카페에 도움을 구했다.

코치님들께서 동적변수 생성하는 방법과 내가 구현하고 싶던 코드 작성에 도움을 주셨다.

 

# 기술코치님 도움

lis = list(map(int, input().split()))

for i in lis:
    a = globals()['num_{}'.format(i)] = list()
    for j in range(i+1):
        try:
            if i/j - i//j ==0:
                a.append(j)
        except:
            pass

    print('num_{}: '.format(i), a)

 

배운 점

  • globals()를 통해 동적 변수를 생성할 수 있다. 다만 동적 변수를 생성할 경우 변수 관리가 힘든 단점이 있다고 한다.
  • format을 이용해서 동적 변수의 변수 명을 설정해줄 수 있다.

링크 : https://wonhwa.tistory.com/m/12

 

구글링 해서 본 다른 사람의 풀이

# 인터넷 다른 풀이 : def을 통한 gcd, lcm 함수 정의 풀이
# 유클리드 호제법 사용 

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

def gcd(a, b) :
    if b==0:
        return a
    else :
        return gcd(b,a%b)

def lcm(a, b) :
    g = gcd(a,b)
    return int(g*(a/g)*(b/g))

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

 

유클리드 호제법이라는 방식을 이용한, 함수를 정의해서 풀이하는 방식도 있다.

유클리드 호제법 및 시간 복잡도에 관한 자료 구조는 다음에 이해해보도록 하겠다.