728x90
https://programmers.co.kr/learn/courses/30/lessons/12953
코딩테스트 연습 - N개의 최소공배수
두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배
programmers.co.kr
처음엔 배열의 최댓값부터 1씩 증가하면서, 모든 원소와 최초로 나눠 떨어지는 수를 찾았다.
맞았지만, 데이터의 크기가 커지면 시간 초과가 날 수 있는 풀이였다.
다른 분들의 풀이를 보니, 최대공약수와 최소공배수를 구해서 풀었다.
a와 b의 최소공배수를 구하는 것은 a와 b의 곱을 최대공약수로 나눈 것이기 때문에 배열의 값들을 짝지어서 곱하고 그 두 수의 최대공약수로 나누는 풀이였다.
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
int gcd(int a, int b){
int c = 0;
while(b != 0){
c = a % b;
a = b;
b = c;
}
return a;
}
int lcm(int a, int b){
return a * b / gcd(a,b);
}
int solution(vector<int> arr) {
int answer = 1;
for(int i = 0 ; i < arr.size() ; i++){
answer = lcm(answer, arr[i]);
}
return answer;
}
깔끔한 풀이다.
728x90
'문제 풀이 > 프로그래머스 알고리즘, SQL' 카테고리의 다른 글
[프로그래머스 월간 코드 챌린지 시즌 1] 이진 변환 반복하기 (구현, 계산) [C++] (0) | 2022.01.11 |
---|---|
[프로그래머스 2018 KAKAO BLIND RECRUITMENT 3차] 방금 그곡 (문자열, ) [C++] (0) | 2022.01.11 |
[프로그래머스 위클리 챌린지] 피로도 (완전탐색, next_permutation) [C++] (0) | 2022.01.04 |
[프로그래머스 2019 카카오 개발자 겨울 인턴십] 징검다리 건너기 (파라매트릭 서치) [C++] (0) | 2021.10.07 |
[프로그래머스 2019 카카오 개발자 겨울 인턴십] 불량 사용자 (DFS, 조합) [C++] (0) | 2021.10.07 |