백준 - 1145번

로두마니·2025년 8월 12일

백준연습장

목록 보기
1/2
post-thumbnail

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)
profile
해적왕이 될 사나이

0개의 댓글