본문 바로가기
프로그래밍/알고리즘

백준 1145 - 적어도 대부분의 배수 파이썬

by 숙님 2023. 6. 5.
728x90

문제 

 

1145번: 적어도 대부분의 배수

첫째 줄에 다섯 개의 자연수가 주어진다. 100보다 작거나 같은 자연수이고, 서로 다른 수이다.

www.acmicpc.net

brute force attack / 이 문제 분류는 브루트 포스

 

풀이 코드1(완전탐색)

a, b, c, d, e = map(int, input().split())

# 범위는 적당히 큰 수까지 함
for num in range(1, 100000000):
    count = 0 
    if num % a == 0:  # num이 a로 나누어지는지 확인
        count += 1
    if num % b == 0:  # num이 b로 나누어지는지 확인
        count += 1
    if num % c == 0:  # num이 c로 나누어지는지 확인
        count += 1
    if num % d == 0:  # num이 d로 나누어지는지 확인
        count += 1
    if num % e == 0:  # num이 e로 나누어지는지 확인
        count += 1
    # 문제의 조건에서 3개 이상으로 나누어지는 수를 찾음
    if count > 2: 
        print(num)
        break

 

풀이 코드2(while문 활용)

a = list(map(int, input().split()))
n = min(a)

# 가장 작은 수의 배수 중에서 가장 큰 수까지 
while True:
    cnt = 0
    for num in a:
        if n % num == 0:
            cnt += 1
        if cnt > 2:
            print(n)
            break
    if cnt > 2:
        break
    n += 1

- 입력으로 다섯 개의 자연수를 받음

- 그 중에서 가장 작은 수를 찾음 

- 그리고 가장 작은 수부터 시작하여 숫자를 1씩 증가시키면서 각 숫자들로 나누어지는지 확인하는 반복문을 수행

- 만약 현재 숫자가 적어도 세 개의 수로 나누어진다면, 해당 숫자를 출력하고 반복문을 종료

- 그렇지 않은 경우에는 다음 숫자를 확인하기 위해 현재 숫자에 1을 더함

- 이를 반복하여 적어도 개의 수로 나누어지는 가장 작은 자연수를 찾음

댓글