programmers- lv.2 (N개의 최소공배수)

이예송·2023년 8월 7일

PS

목록 보기
82/97

문제링크: N개의 최소공배수

✍🏻 Information

content
언어python
난이도⭐️⭐️+0.5
풀이시간70분
제출횟수
인터넷검색유무yes




🍒 My Code

def solution(arr):
    answer = 1
    jisoo = [0 for i in range(max(arr)+1)]
    #각 원소를 지수로 표현
    for i in arr:
        tmp = [0 for i in range(max(arr)+1)]
        x = 2
        while x <= i:
            if i % x == 0:
                tmp[x]+=1
                if tmp[x]>=jisoo[x]:
                    jisoo[x]=tmp[x]
                i //= x
            else:
                x += 1
    for i in range(2,len(jisoo)):
        if jisoo[i]>=1:
            answer*=(i**jisoo[i])
    return answer




💡 What I learned

  • 처음에 n개의 최소공배수가 n개가 모두 나눠떨어져야하는줄 알았는데 2개이상만 나눠떨어지면 됐다. (이것때문에 삽질 엄청함.. 왜 틀리지? 다 맞는데?하며..)
    그리고 i로 2개 이상 나눠떨어지면 그 수들을 arr에서 i로 나눠주고 answer에 i를 곱해준 후 마지막에 answer에 남은 arr에 있는 수들을 곱해주는 식으로 구현하려 했는데, 최소공배수 구하는 법 구하면서 봤던 각 수를 소인수분해하고 -> 각 인수의 지수 중 가장 큰 수로 해서 곱하면 되는 방식을 구현하였다. (예- 2^23^1, 2^35^2, 2^13^2 라면 최소공배수는 2^33^2*5^2)
  • list comprehension 구문의 if else 문:
[ 조건_만족시_출력값 if 조건 else 조건_불만족시_출력 값 for i in data] 
  • x의 소인수분해 python코드:
def factorization(x):
    d = 2
    while d <= x:
        if x % d == 0:
            print(d)
            x = x / d
        else:
            d = d + 1
  • 소인수분해 코드, 최소공배수 구하는 법 등을 검색해서 구현한점이 아쉽다,,

0개의 댓글