Today I Learned
- Programmers 문제 풀기
Programmers 문제 풀기
최대공약수와 최소공배수
문제 설명
두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.
입출력 예
n | m | return |
3 | 12 | [3, 12] |
2 | 5 | [1, 10] |
나의 1차 풀이
function solution(n, m) {
let max = Math.max(n,m);
let min = Math.min(n,m);
let array = [];
// 최대공약수
for (let i = min; i >= 1; i--) {
if (max % i === 0) {
array.push(i);
break;
};
};
// 최대공배수
let a = max
while (a % min !== 0) {
a += max
}
array.push(a)
return array;
}
테스트 케이스 2개는 모두 통과해서 맞는 답인 줄 알았는데 제출했더니 정확성 테스트 대부분이 실패가 떴다. 일단 어디가 틀렸는지 모르겠어서 array에 push 하는 방식이 아닌 배열에 변수를 직접 넣는 방법으로 변경했다. 그리고 명확하게 틀렸던 부분은 최대공약수 코드에 if문 조건이었다. && 연산자로 최댓값, 최솟값을 모두 조건에 넣어줘서 문제를 통과할 수 있었다.
나의 최종 풀이
function solution(n, m) {
let max = Math.max(n,m);
let min = Math.min(n,m);
let first = 0;
// 최대공약수
for (let i = min; i >= 1; i--) {
if (max % i === 0 && min % i === 0 ) {
first = i;
break;
};
};
// 최대공배수
let second = max;
while (second % min !== 0) {
second += max;
};
return [first, second];
}
- n, m 중에 최댓값, 최솟값을 찾아서 변수에 할당한다.
- 최솟값부터 시작해서 1씩 작아지는 for문을 돌려서 최대공약수를 찾는다.
- while을 이용해서 최대공배수를 찾는다.
- 최대공약수와 최소공배수 변수를 담은 배열을 return한다.
회고
점핏에서 이력서 5군데 더 넣었다.
'알고리즘 > Programmers' 카테고리의 다른 글
[TIL] 2023.04.21 Programmers_이상한 문자 만들기 (0) | 2023.04.23 |
---|---|
[TIL] 2023.04.20 Programmers_같은 숫자는 싫어 (0) | 2023.04.20 |
[TIL] 2023.04.18 Programmers_행렬의 덧셈 (0) | 2023.04.18 |
[TIL] 2023.04.17 Programmers_약수의 개수와 덧셈 (0) | 2023.04.17 |
[TIL] 2023.04.16 Programmers_연속된 수의 합 (0) | 2023.04.16 |
댓글