한국어/Hackerrank - 한국어 버전과 문제가 다를 수 있습니다. 채점은 Hackerrank를 추천합니다.
1 <= 입력 개수 <= 10, 1 <= 입력값 <= 40
for _ in range(int(input())):
n = int(input())
test = 1
while True:
for i in range(1, n+1):
if test%i:
break
else:
print(test)
break
test += 1
브루트 포스 방식으로 조건에 맞을 때까지 모든 수를 시도해보는 것입니다.
test라는 변수를 만들어 1부터 n 중 하나라도 나머지가 0이 아닌 게 있다면 test를 증가시킵니다.
만약 전부 나머지가 0이면 else문으로 들어가 test를 출력하고 while문에서 break 합니다.
*for문에 else는 for문 안에서 끝까지 break가 없다면 실행됩니다.
from math import gcd
from functools import reduce
for _ in range(int(input())):
print(reduce(lambda x,y: x*y//gcd(x,y), range(1, int(input())+1)))
또 다른 방법은 최소공배수로 1부터 n까지의 모든 수로 나누어지면 결국 1부터 n까지의 모든 수의 최소공배수와 같다.
최소공배수를 구하는 방법으로 유클리드 호제법을 이용하는데 결론적으로 두 수의 최소공배수는 두 수의 곱 / 두 수의 최대공약수이다.
그러므로 reduce함수를 이용해 계속해서 최소공배수를 구하여 출력한다.
* 유클리드 호제법을 이용한 최대공약수, 최소공배수 구하는 법과 reduce 함수에 대한 것을 스스로 찾아보시기 바랍니다.
'알고리즘 공부 > 프로젝트 오일러(Project Euler)' 카테고리의 다른 글
{프로젝트 오일러/Project Euler} 7. 10001번째 소수 (0) | 2021.01.03 |
---|---|
{프로젝트 오일러/Project Euler} 6. 제곱의 합과 합의 제곱의 차 (0) | 2021.01.03 |
{프로젝트 오일러/Project Euler} 4. 세자리 수를 곱해 만든 대칭수 (0) | 2021.01.01 |
{프로젝트 오일러/Project Euler} 3. 가장 큰 소인수 구하기 (0) | 2020.12.31 |
{프로젝트 오일러/Project Euler} 2. 짝수 피보나치 항의 합 (0) | 2020.12.31 |