이직하고만다(분노)

99클럽 코테 스터디 36일차 TIL + 백준 완전탐색(브1)

xxo_ohii 2024. 8. 27. 10:29
728x90

 

- 링크 : https://www.acmicpc.net/problem/1145

- 주제 : 완전탐색

import math
from itertools import combinations

def lcm(a, b):
    return abs(a * b) // math.gcd(a, b)

def lcm_of_three(a, b, c):
    return lcm(lcm(a, b), c)

numbers = list(map(int, input().split()))

min_lcm = float('inf')

# 5개의 수 중 3개의 수를 선택하는 모든 조합을 구한다.
for comb in combinations(numbers, 3):
    current_lcm = lcm_of_three(*comb)
    if current_lcm < min_lcm:
        min_lcm = current_lcm

print(min_lcm)

 

- 오늘의 후기 

def lcm함수
: 두 수a와b의 최소 공배수를 계산합니다.
: 최소 공배수는 두 수의 곱을 그들의 최대 공약수(GCD)로 나눈 값으로 구할 수 있습니다.

lcm_of_three 함수
:세 수 a, b, c의 최소 공배수를 계산합니다
:먼저 두 수 a와 b의 최소 공배수를 구하고, 그 결과와 c의 최소 공배수를 다시 계산합니다

numbers 리스트
:사용자로부터 5개의 숫자를 입력받아 리스트로 저장합니다

min_lcm 변수
:최소 공배수를 찾기 위해 초기값을 무한대(float('inf'))로 설정합니다
:이렇게 하면 처음 계산된 LCM이 자동으로 최소값이 되도록 할 수 있음

combinations(numbers, 3) 함수는 5개의 숫자 중 3개의 숫자를 선택하는 모든 조합을 생성하는데 각 조합에 대해 lcm_of_three 함수를 사용해 세 숫자의 최소 공배수를 계산한다..
계산된 LCM이 현재까지 찾은 최소 LCM보다 작으면 min_lcm을 업데이트하면됨

==> 결과)
모든 조합을 다 계산한 후 최종적으로 찾은 가장 작은 최소 공배수를 출력


728x90