티스토리 뷰
안녕하세요,
오늘은 난이도 2의 'N개의 최소공배수'를 가져왔습니다!!
풀었던 저의 주관적인 풀이를 공유하고자 합니다!
문제 설명
두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요.
- 제한 사항
- arr은 길이 1이상, 15이하인 배열입니다.
- arr의 원소는 100 이하인 자연수입니다.
입출력 예
arr | result |
[2,6,8,14] | 168 |
[1,2,3] | 6 |
우선 이 문제같은 경우에는
최소공배수를 구하는 방식에 대해 알고있어야 좀 수월하게 풀 수 있습니다.
좀 쉽게 풀어서 설명을 하자면
[4, 6, 7]의 최소 공배수를 구하려 한다면, 어떠한 최소 공배수를 N이라 가정했을때 N % 4, N % 6, N % 7을 했을때 모두 0으로 떨어져야 합니다. 왜냐하면 모두 4와 6, 7의 배수로 이루어진 수이기 때문이죠
이 방식을 이용한다면 미지의 n을 설정해두고, 배열중 하나의 수 (여기서는 arr[0])에 n을 곱하여 나온 수를 나머지 arr를 돌면서 나머지를 계산했을때, 나머지가 0이 나오는 최초의 수가 최소공배수가 되는 것입니다.
코드화 한다면 다음과 같을 것입니다.
function solution(arr) {
let flag = false
let n = 0
while(!flag){
n++
for(let i = 1; i<arr.length; i++){
if(arr[0] * n % arr[i] === 0){
flag = true
} else {
flag = false
break
}
}
}
return n * arr[0];
}
flag라는 변수를 만든 이유는, while문 종료를 위해 만들어 두었습니다. arr[0]과 미지의 n을 곱한 수를 나머지 index로 나누었을 때 0이 된다면 flag를 true로 변환해줍니다. 하지만, 만약 하나라도 0이 아니라면 flag는 다시 false로 변경되며 while문을 실행하게 될 것입니다.
그리고 하나라도 나머지가 0이 아니라면 최소 공배수가 될 수 없기때문에, break문으로 이후의 처리를 하지 않고 나오게 구현하였습니다.
문제 자체는 어렵지 않지만, 최소 공배수를 구하는 방식에 대해 이해하고 있지 않다면 나름 어려울 수도 있지 않을까 생각합니다..
여기까지.. N개의 최소 공배수 문제였습니다
다른 풀이들도 한번 방문해주세요~
이상 감사합니다!!
'프로그래머스 > 난이도 2' 카테고리의 다른 글
[자바스크립트, js] 프로그래머스 기능개발 (0) | 2022.11.19 |
---|---|
[자바스크립트, js] 프로그래머스 구명보트 (0) | 2022.11.17 |
[자바스크립트, js] 프로그래머스 영어 끝말잇기 (0) | 2022.11.16 |
[자바스크립트, js] 프로그래머스 피보나치 수 (1) | 2022.11.02 |
[자바스크립트, js] 프로그래머스 혼자 놀기의 달인 (0) | 2022.10.13 |
- Total
- Today
- Yesterday
- 자바스크립트
- 나도이직시켜주세요...
- 자바스크립트 three.js
- 프로그래머스
- 프로그래머스난이도3
- react
- 난이도2
- 리액트
- 깃허브 계정 변경
- 유연한 컴포넌트
- javascript THREE.js
- THREE.js 랜덤
- 터미널 깃허브 계정 변경
- three
- terminal 깃허브 계정 변경
- 우아한 비동기
- mac os 깃허브 계정 변경
- JavaScript
- JS
- ErrorBoundary
- 코딩테스트
- 깃허브 계정 삭제
- Three.js
- 깃허브 mac
- Effective Component
- react.suspense
- 프로그래머스 js
- 난이도3
- react.errorboundary
- mac 깃허브 계정 변경
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |