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()함수를 통해
최소공배수를 한번에 구할 수 있었습니다.
조금 허무하긴 하지만.. 가장 간단한 방법이기도 하고
라이브러리를 잘 활용하는 것도 코딩실력이라고 다들 이야기하니까요!
시간날때 라이브러리 공부도 조금씩 해야겠습니다:)
'Baekjoon Online Judge(BOJ)' 카테고리의 다른 글
Baekjoon 10039번 : 평균 점수 (Python) (0) | 2024.06.30 |
---|---|
Baekjoon 2753번 : 윤년 (Python) (0) | 2024.06.28 |
Baekjoon 1789번 : 수들의 합 (Python) (0) | 2024.06.18 |
Baekjoon 11653번 : 소인수분해 (Python) (0) | 2024.06.13 |
Baekjoon 10817번 : 세 수 (Python) (0) | 2024.06.12 |