코딩 테스트/프로그래머스

Lv2. N개의 최소공배수

  • -
728x90
반응형

문제 보기 :  N개의 최소공배수

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


문제

  • 정답률 : 67%


작성 코드

def solution(arr):
    k = [] ; i = 2
    maxx = max(arr)
    while i <= maxx :
        n = 0
        for j in range(len(arr)): #[2, 6, 8, 14]
            if arr[j] % i == 0: 
                n+=1 #2
        if n >= 2:
            k.append(i)
            for j in range(len(arr)):
                if arr[j] % i == 0:
                    arr[j] //= i #[1,3,4,7]
        else:
            i+=1
                    
    answer = 1
    for i in k:
        answer *= i
    for j in arr:
        answer *= j
        
    return answer

풀이

초등학생 시절 여러개의 숫자에 대한 최소공배수를 찾는 걸 배울 때,
2개 이상의 숫자에서 같은 약수가 있으면 그 숫자로도 나눠서 최소 공배수를 찾았던 기억이 난다.

2 | 4 6 8
2 | 2 3 4
-----------
= 1 3 2

4,6,8의 최소 공배수 = 2*2*1*3*2 이런거 말이다 !

이거랑 같은 개념으로 코드를 짰다. 근데 이제, 4,6,8은 리스트로, 공배수는 n으로 둔 것만 다르다.

​i를 2로 시작한 건 1은 공배수로서 의미가 없었기 때문이고,
arr의 원소 중 2개 이상의 원소에서 공배수가 생겼을 때엔 arr 내 해당 원소를 i로 나누었다.

* 해결해야하는 예제는 [4,4]의 기댓값이 4인 것과 [2,3,6]의 기댓값이 6인 것 이 정도였다.

잘 안된다면 아래의 예제로 추가 확인해보는 것도 좋은 방법이다

입력값 k arr 기댓값
[2, 6, 8, 14] [2] [1,3,4,7] 168
[4,4] [2,2] [1,1] 4
[2,3,6] [2,3] [1,1,1] 6
[2,6,13] [2] [1,3,13] 78

 

320x100
728x90

'코딩 테스트 > 프로그래머스' 카테고리의 다른 글

Lv2. n^2 배열 자르기  (0) 2024.07.16
Lv2. 행렬의 곱셈  (0) 2024.07.16
Lv2. 점프와 순간이동  (0) 2024.07.15
Lv1. 실패율  (0) 2024.07.13
Lv2. 다음 큰 숫자  (0) 2024.07.13
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.