728x90

N개의 최소공배수

 

문제 설명

두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요.

 

제한 사항

arr은 길이 1이상, 15이하인 배열입니다.

arr의 원소는 100 이하인 자연수입니다.

입출력 예

arr result

[2,6,8,14] 168

[1,2,3] 6 

 

실패 답 1

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def solution(arr):
    for i in range(len(arr)):
        maxBool = False
        num = -1
        for j in range(arr[i]):
            if not arr[i]%(arr[i]-i):
                maxBool = True
                break
        if maxBool:
            maxNum = arr[i]-i
            answer = 0
            for j in range(len(arr)):
                answer *= arr[i]
            return answer / (maxNum**(len(arr)-1))
cs

 

실패 답 2

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def solution(arr):
    answer = 1
    
    arr.sort()
    arrSum = sum(arr)
    indexNum = 0
    answerBool = False
    for i in range(arr[0]):
        if not arrSum%(arr[0]-i):
            indexNum = i
            answerBool = True
            break
    
    # if answerBool:
    
    for i in range(len(arr)):
        answer *= arr[i]
    return answer / ((arr[0]-indexNum)**(len(arr)-1))
cs

 

실패 답 3

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def solution(arr):
    answer = 1
    arr.sort()
    indexNum = 0
    breakBool = False
    
    for i in range(arr[0]):
        for j in range(len(arr)):
            if arr[j]%(arr[0]-i):
                # breakBool = True
                break
            indexNum = i
        else:
            break
        # if breakBool:
        #     break
    for i in range(len(arr)):
        answer *= arr[i]
    return answer / ((arr[0]-indexNum)**(len(arr)-1))
cs

 

실패 답 4

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
def solution(arr):
    answer = 1
    arr.sort()
    indexNum = 0
    maxNum = 0
    
    for i in range(arr[0]):
        for j in range(len(arr)):
            if arr[j]%(arr[0]-i):
                break
            # indexNum = i
            # maxNum = arr[0]-i
        else:
            maxNum = arr[0]-i
            print(maxNum)
            break
            
    while len(arr)>=2:
        a=arr.pop()
        b=arr.pop()
        c=a*b//maxNum
        print(c)
        arr.append(c)
        # arr.append(a*b//maxNum)
    
    return arr[0]
    # for i in range(len(arr)):
    #     answer *= arr[i]
    # return answer / ((arr[0]-indexNum)**(len(arr)-1))
cs

 

성공한 내 답

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def Greatest(a,b):
    for i in range(a):
        if a%(a-i)+b%(a-i)==0:
            return a-i
 
def solution(arr):
    arr.sort()
            
    while len(arr)>=2:
        a=arr.pop()
        b=arr.pop()
        c=a*b//Greatest(a,b)
        arr.append(c)
    
    return arr[0]
cs

 

 

 

남의 답

 

1
2
3
4
5
6
7
8
9
10
11
12
13
def solution(arr):
    MAX = max(arr)
 
    while True:
        cnt = 0
        MAX += 1
 
        for a in arr:
            if MAX%a == 0:
                cnt += 1
        if cnt == len(arr):
            break
    return MAX
cs

 

1217점 + 4점 -> 1221점

 

728x90
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기