일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 30 | 31 |
Tags
- n^2 배열 자르기
- 다이내믹 프로그래밍
- mermaid js
- codeSyntaxHighlight
- 1620
- 5525
- 주식 가격
- javascript
- 옵셔널 체이닝 연산자
- 이분탐색
- Hasing
- 숫자 문자열과 영단어
- colorSyntax
- BOJ
- 소수 체크
- 18111
- 구간 합 구하기 4
- 정수 삼각형
- 브루트포스 알고리즘
- js
- 위클리 챌린지
- 10162
- 깊이 우선 탐색
- 없는 숫자 더하기
- 4796
- 2018 KAKAO BLIND RECRUITMENT
- 프로그래머스
- react
- Git Convention
- C++
Archives
- Today
- Total
개발하는 kim-hasa
[c++][프로그래머스] N개의 최소공배수 본문
https://programmers.co.kr/learn/courses/30/lessons/12953
코딩테스트 연습 - N개의 최소공배수
두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배
programmers.co.kr
여러수의 최소공배수를 구하는 문제입니다.
여러 수를 나열해두고, 두개 이상이 나눠진다면 나눠지는 수들만 나누고 나누어지지 않는다면 증가시키는 방법으로 풀었습니다.
예를 들어서, [2, 4, 6, 8, 9] 가 있다면
2로 나누면 [1, 2, 3, 4, 9] 가 되고, 여기서 2로 한번 더 나누어지므로
2로 나누면 [1, 1, 3, 2, 9] 가 됩니다. 이제는 2로는 안 나누어지므로 증가시켜서 3으로 나누어야 합니다.
3으로 나누면 [1, 1, 1, 2, 3] 이 됩니다. 이제는 더이상 나누어지지 않으므로,
(2 * 2 * 3) * (1 * 1 * 1 * 2 * 3) = 72가 최소공배수가 됩니다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<int> arr) {
int answer = 1;
int len = arr.size(); // 원소의 개수
int div = 2;
int divcount = 0; // 나눠지는 개수
sort(arr.begin(), arr.end()); // 정렬
int big = arr[len-1]; // 가장 큰 수
while(div <= big) // 가장 큰 수보다 나누는 수가 커질 수는 없음
{
for(int i=0; i<len; i++)
{
if(arr[i] % div == 0)
{
divcount++; // 나눠지는지 안나눠지는지 확인
}
}
if(divcount > 1) // 두개이상 나눠진다면
{
for(int j=0; j<len; j++)
{
if(arr[j] % div == 0)
{
arr[j] = arr[j] / div; // 수를 나눔
}
}
divcount = 0; // 다시 계산
answer = answer * div;
}
else
{
div++;
divcount = 0;
}
}
for(int k=0; k<len; k++)
{
answer = answer * arr[k]; // 마지막으로 남은 수를 구함
}
return answer;
}
'Algorithm > Programmers(c++)' 카테고리의 다른 글
[c++][프로그래머스] 최솟값 만들기 (0) | 2021.08.23 |
---|---|
[c++][프로그래머스] jadenCase 문자열 만들기 (0) | 2021.08.23 |
[c++][프로그래머스] 올바른 괄호 (0) | 2021.08.20 |
[c++][프로그래머스] 짝지어 제거하기 (0) | 2021.08.19 |
[c++][프로그래머스] 영어 끝말잇기 (0) | 2021.08.18 |