-
31. N개의 최소공배수코딩 테스트/Level 2 2020. 8. 15. 10:22반응형
https://programmers.co.kr/learn/courses/30/lessons/12953
N개의 최소공배수
연습문제
3631명 완료유클리드 호제법 참고
코딩테스트 연습 - N개의 최소공배수
두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배��
programmers.co.kr
def solution(arr): for i in range(len(arr) - 1): arr[i + 1] = lcm(arr[i], arr[i + 1]) return arr[-1] # arr[len(arr) - 1] def lcm(a, b): return (a * b) / gcd(a, b) def gcd(a, b): mod = a % b while mod > 0: a, b = b, mod mod = a % b return b
math.gcd를 이용해서 줄여 보겠습니다.
from math import gcd def solution(arr): for i in range(len(arr) - 1): arr[i + 1] = int((arr[i] * arr[i + 1]) / gcd(arr[i], arr[i + 1])) return arr[-1]
함수형으로...
from math import gcd from functools import reduce def solution(arr): return reduce(lambda a, b: int(a * b / gcd(a, b)), arr)
Java
class Solution { public int solution(int[] arr) { for (var i = 0; i < arr.length - 1; i++) arr[i + 1] = lcm(arr[i], arr[i + 1]); return arr[arr.length - 1]; } int lcm(int a, int b) { return (a * b) / gcd(a, b); } int gcd(int a, int b) { int temp; while (b != 0) { temp = a % b; a = b; b = temp; } return a; } }
함수형으로..
import java.util.Arrays; class Solution { public int solution(int[] arr) { return Arrays.stream(arr).reduce(this::lcm).getAsInt(); } int lcm(int a, int b) { return (a * b) / gcd(a, b); } int gcd(int a, int b) { int temp; while (b != 0) { temp = a % b; a = b; b = temp; } return a; } }
옵셔널을 안쓰면 경고가 뜨는데...
import java.util.Arrays; class Solution { public int solution(int[] arr) { var optional = Arrays.stream(arr).reduce(this::lcm); return optional.isPresent()? optional.getAsInt() : 0; } int lcm(int a, int b) { return (a * b) / gcd(a, b); } int gcd(int a, int b) { int temp; while (b != 0) { temp = a % b; a = b; b = temp; } return a; } }
반응형