일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 삼항연산자
- 부트캠프
- 자바스크립트 reduce()
- HTML
- reactnativecli
- 자바스크립트 split()
- 개발공부
- [파이썬 실습] 중급 문제
- 코드스테이츠
- 코딩부트캠프
- [파이썬 실습] 심화 문제
- 자바스크립트 날씨 웹 만들기
- RN 프로젝트
- 간단한 날씨 웹 만들기
- 개발일기
- 리트코드
- 자바스크립트 sort()
- 자바스크립트
- 프론트개발
- 엘리스
- 프로그래머스
- [파이썬 실습] 기초 문제
- [AI 5기] 연습 문제집
- 날씨 웹 만들기
- leetcode
- 자바스크립트 날씨
- 프론트개발공부
- 엘리스 AI 트랙 5기
- JavaScript
- 엘리스 ai 트랙
- Today
- Total
개발조각
[프로그래머스] N개의 최소공배수 본문
이번 문제는 레벨 1에서 풀었던 [프로그래머스] 최대공약수와 최소공배수을 적용해서 풀었습니다.
제가 올린 [프로그래머스] 최대공약수와 최소공배수를 참고하시면 좋을 것 같아요.👏
https://development-piece.tistory.com/37
[프로그래머스] 최대공약수와 최소공배수
초등학교 때 배운 최대공약수와 최소공배수를 코드로 쓰라니까 엄청 당황스럽네요. 어떻게 쓸지 막막해서... 검색해 봤더니 "유클리드 호제법"이라는 게 있더라고요. 설명을 아무리 읽어봐도 이
development-piece.tistory.com
해결방안을 얘기하기 전 어떻게 풀었는지에 대해 설명을 하자면
제가 최소공배수를 구할 수 있는 방법이
유클리드 호제법을 써서 두 수의 최소공배수를 구하는 방법밖에 몰라서
이 방법을 적용하는게 최선의 방법이라고 생각했습니다.
유클리드 호제법에 대해 간단하게 설명하자면
[유클리드 호제법]
두 수 a, b가 있을 때 (a > b)
a % b === 0이면 b가 최대공약수입니다.
a % b !== 0이면 b에 +1씩 해주어 a % b === 0 나올 때까지 반복합니다.
(참고로 알면 좋을 것 같아서 씁니다.)
두 수 (a, b)
a x b = 최대공약수 * 최소공배수
유클리드 호제법을 활용해서 어떻게 구했나면
[2,6,8,14]가 있으면
2, 6의 최대공약수는 6
6, 8의 최대공약수는 24
24, 14의 최대공약수는 168
이런 식으로 구했습니다.
해결방안
function solution(arr) {
let a = arr[0];
let lcm;
for(let i=1; i<arr.length; i++){
lcm = Math.max(a, arr[i]);
while(true){
if((lcm % a === 0) && (lcm % arr[i] === 0)){
a = lcm;
break;
}
lcm++;
}
}
return lcm;
}
let a = arr[0];
a는 두 수(a, b)가 있으면 a를 나타내는 주는 변수입니다.
a는 두 수의 최대공배수를 구한 값을 넣는 곳인데
초기값을 설정해 주었을 때 최대공배수가 없어서 arr[0]을 넣어주었습니다.
[2,6,8,14]가 있으면 a의 초기값은 2입니다.
let lcm;
lcm은 최대공배수를 담아주는 변수입니다.
for(let i=1; i<arr.length; i++)
여기서 반복문을 쓰는 이유는
arr = [2,6,8,14]
2, 6의 최대공약수는 6
6, 8의 최대공약수는 24
24, 14의 최대공약수는 168
여기서 파란색 숫자가 arr배열의 원소입니다.
순서대로 사용해서 쓸 생각이라 for문을 써주었고
변수 a의 초기값 설정으로 arr[0]을 사용했습니다.
반복문에서는 arr[1]부터 사용할 거라서 i=1로 초기값을 설정했습니다.
for문 안에 코드는 밑에 최소공배수를 구하는 코드를 거의 그대로 넣어 주었습니다.
function solution(n, m) {
// 최소공배수
let lcm = Math.max(n, m);
while(true){
if((lcm % n === 0) && (lcm % m === 0)){
break;
}
lcm++;
}
return lcm;
}
여기까지 프로그래머스 N개의 최소공배수 해결방안에 대해 설명해보았습니다.
'알고리즘🅰 > 프로그래머스' 카테고리의 다른 글
[프로그래머스]튜플 (0) | 2022.04.14 |
---|---|
[프로그래머스] JadenCase 문자열 만들기 (0) | 2022.04.12 |
[프로그래머스] 최댓값과 최솟값 (0) | 2022.04.03 |
[프로그래머스] 멀쩡한 사각형 (0) | 2022.03.27 |
[프로그래머스] 기능개발 (0) | 2022.03.21 |