본문 바로가기
알고리즘

[알고리즘 문제] 꽃다발 (Python / 파이썬)

by yewonnie 2022. 5. 18.

문제

유니와 지니는 성공한 형제다. 그들은 자신을 키워준 부모님께 꽃 이벤트를 하려고 한다.
그들은 꽃 시장을 갔는데 5가지 종류의 꽃이 한 묶음 단위로 판매되고 있었다. 유니와 지니는 3가지의 꽃을 구매하려고 하는데, 여러 묶음을 구매하더라도 3가지 종류 모두 같은 개수로 하나의 대왕 꽃다발을 만들어 부모님께 드리려고 한다. 꽃다발이 너무 커도 예쁘지 않으니 그렇게 만들 수 있는 가장 작은 꽃다발을 만들고자 할 때, 꽃다발에 들어가는 꽃이 몇 송이인지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트케이스의 수 T가 주어진다..
각 테스트케이스의 첫 줄에 다섯가지 꽃이 각각 몇 송이 단위로 판매되는지 공백으로 구분되어 주어진다. 모든 꽃은 1송이 이상, 100송이 이하의 묶음으로 판매 된다.
( 1 ≤ T ≤ 10 )

출력

각 테스트케이스마다 '#'과 테스트케이스의 번호, 공백을 출력한 뒤 꽃다발에 포함되는 꽃이 몇 송이인지 출력한다.

문제 풀이 

이 문제는 문제를 이해하는 것부터 살짝 어려움이 있었습니다. 

꽃다발에 포함되는 꽃이 몇 송이인지 구하라고 해서 

총 몇 송이인지 물어보는 것인줄 알았는데 

예제 출력을 통해 꽃다발에 포함되는 3가지 종류의 꽃이 각각 몇 송이

포함되는지 구하는 것이었습니다. 

 

5가지 종류의 꽃 중 3 종류의 꽃 송이가 모두 같도록 구매해야 하므로

5가지 꽃 중 세 개를 골라 최소 공배수를 구하면 됩니다. 

그리고 그 중 가장 작은 꽃다발을 구하라고 했으니 최소값을 구하면 됩니다. 

 

완전 탐색을 이용해 문제를 해결했습니다. 먼저 최소 공배수가 될 수 있는 모든 수를 하나씩 확인하며

만약 5가지 종류의 꽃 중 나누어 떨어지는 수가 3개라면 

출력하도록 해주었습니다. 


My Code

for tc in range(int(input())):
    data = list(map(int,input().split())) # 다섯가지 꽃의 송이 수

    for i in range(1, 1000001): # 최소 공배수가 될 수 있는 수의 범위
        count = 0
        for j in range(5):
            if i % data[j] == 0: # 나누어 떨어지면
                count += 1       # 개수를 세어줌
        if count >= 3: # 나누어 떨어지는 수가 3개 이상이라면 
            print('#' + str(tc + 1), end = ' ')
            print(i) # 3 수의 최소 공배수이므로 출력 
            break

 

 

댓글