Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 과제진행하기
- DP
- 백준 알고리즘
- solved.ac골드
- 우박수열정적분
- 비트마스크
- 2023카카오블라인드코테
- 알고리즘 문제풀이
- 알고리즘문제풀이
- 지도 여러개
- 코어자바스크립트
- Lv2
- JS
- JS스터디
- [pccp 기출문제]
- 스택
- solved.ac플래티넘
- 최소스패닝트리
- 프로그래머스
- pccp기출문제
- 타겟넘버
- 백준알고리즘
- c++
- 5강클로저
- div2개
- 정렬
- Lv3
- 두원사이의정수쌍
- React.StrictMode
- 이중지도
Archives
- Today
- Total
호지
[프로그래머스] 숫자카드 나누기 문제풀이 JS 본문
최대공약수를 이용한 문제풀이이다.
각각 arrayA와 arrayB에서 최대공약수를 구한뒤,
arrayA의 최대공약수가 arrayB의 모든 원소에서 나누어 떨어지지 않는지,
arrayB의 최대공약수가 arrayA의 모든 원소에서 나누어 떨어지지 않는지
두 경우를 확인한 뒤, 한번이라도 나누어 떨어졌다면 해당 값은 조건을 만족하지 않는 경우이므로 제외한다.
둘의 최대공약수가 조건을 모두 만족한다면 두 값 중 큰 값을,
아니라면 만족하는 값을
둘다 만족하지 않으면 0을 결과값으로 반환하면 된다.
const gcd = (v1, v2) => {
let a = v1 > v2 ? v1 : v2
let b = v1 <= v2 ? v1 : v2
while (b > 0) {
;[a, b] = [b, a % b]
}
return a
}
function solution(arrayA, arrayB) {
if (arrayA.length === 1) {
if (arrayA[0] === arrayB[0]) return 0
return arrayA[0] > arrayB[0] ? arrayA[0] : arrayB[0]
}
let gcdA = gcd(arrayA[0], arrayA[1])
let gcdB = gcd(arrayB[0], arrayB[1])
for (let i = 2; i < arrayA.length - 1; i++) {
gcdA = gcd(gcdA, arrayA[i])
gcdB = gcd(gcdB, arrayB[i])
}
for (let i = 0; i < arrayA.length; i++) {
if (gcdA) {
if (arrayB[i] % gcdA === 0) {
gcdA = false
}
}
if (gcdB) {
if (arrayA[i] % gcdB === 0) {
gcdB = false
}
}
}
if (gcdA) {
if (gcdA > gcdB) return gcdA
}
if (gcdB) return gcdB
return 0
}
https://school.programmers.co.kr/learn/courses/30/lessons/135807
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [PCCP 기출문제] 1번 / 붕대 감기 문제풀이 JS (0) | 2024.07.22 |
---|---|
[프로그래머스] 우박수열 정적분 문제풀이 JS (0) | 2023.09.19 |
[프로그래머스] 귤 고르기 문제풀이 JS (0) | 2023.09.19 |
[프로그래머스] 테이블 해시 함수 문제풀이 JS (0) | 2023.09.12 |
[프로그래머스] 가장 큰 수 문제풀이 JS (0) | 2023.09.12 |
Comments