본문 바로가기

Baekjoon Online Judge(BOJ)

Baekjoon 1934번 : 최소공배수 (Python) / import math, lcm()

 

Question

 

Answer(인줄 알았던 것)

 

T = int(input())  # 테스트케이스 개수 입력받기
for i in range(0, T):  # 테스트케이스 수 만큼 반복
    A, B = map(int, input().split())
    C = A * B
    for j in range(2, C):
        D = C / j
        if (D % A == 0) & (D % B == 0):
            C = int(D)
    print(C)

 

위 코드는 제가 정답이라고 확신하고 제출했던 코드입니다만,

제출결과 시간초과로 오답처리되었습니다...

그래서 시간초과가 안 뜨도록 메모리 관리를 위한 확인사항을 찾아보았습니다.

 

1. 불필요한 반복문은 없는지

 

제 코드를 보면 반복문은 2번 사용되는데 

첫 번째 반복문은 테스트케이스 수 만큼 반복해야하니까

무조건 필요한 반복문이고..

두번쨰 반복문에서 뭔가 연산도 많이 일어나고 수정이 필요해 보이긴 합니다.

 

2. 굳이 반복문 안에서 변수를 선언하는지

 

네, 반복문 안에서 변수를 선언하고는 있지만

저렇게 하지 않으면 A*B 값에 나누기가 나누어 떨어지는지 확인할 방법이 흠..

그래서 찾아보았더니 math 라이브러리를 이용하면 쉽게 해결 가능하더군요..

 

Answer
import math
T = int(input())  # 테스트케이스 개수 입력받기
for i in range(0, T):  # 테스트케이스 수 만큼 반복
    A, B = map(int, input().split())
    print(math.lcm(A, B))

 

 

Explanation

 

math 라이브러리에서 lcm()함수를 통해

최소공배수를 한번에 구할 수 있었습니다.

조금 허무하긴 하지만.. 가장 간단한 방법이기도 하고

라이브러리를 잘 활용하는 것도 코딩실력이라고 다들 이야기하니까요!

시간날때 라이브러리 공부도 조금씩 해야겠습니다:)