5개의 자연수 중에서 이 수의 적어도 대부분의 배수는 위의 수 중 적어도 세 개로 나누어지는 가장 작은 자연수이다. 서로 다른 다섯 개의 자연수가 주어질 때, 적어도 대부분의 배수를 출력하는 프로그램을 작성하시오.
이 문제를 보고, 구하고자 하는 수는 5개의 자연수 중에서 3개를 랜덤으로 뽑아서 곱하면 될것이라 생각하고 다음 코드를 썼다.
import random
m_list = list(map(int, input().split()))
rand_sample = random.sample(m_list,3)
result = 1
#print(rand_sample)
for i in range(3):
result *= rand_sample[i]
print(result)
하지만 나의 코드가 틀린 이유를 어렵지 않게 찾아낼 수 있었다.
1. 세 개의 자연수를 골라 이것을 곱하여 배수를 찾았으나 이것이 가장 작은 자연수임을 확신할 수 없다는 것.
2. 랜덤으로 뽑은 3개의 수의 최소공배수를 구하는 문제가 아니라, 5개의 수 중에서 3개 이상이 나누어떨어지는 가장 작은 자연수를 찾는 문제라는 것.
따라서 random.sample을 쓰면 안되고 전체 리스트를 하나씩 매번 검사해야한다. while문을 써서 안에서 숫자의 개수가 3개가 되면 break하여 탈출하도록한다.
import random
m_list = list(map(int, input().split()))
result = 1
while True:
count = 0
for i in range(len(m_list)):
if (result % m_list[i] == 0):
count += 1
if count >= 3:
break
result += 1
print(result)