오늘의 문제 : x만큼 간격이 있는 n개의 숫자
걸린시간 : 5분
권장시간 : 30분
오늘의 회고
- 이 문제는 어렵지 않게 풀었다. 반복문을 통해 x를 i만큼 곱해주면서 배열을 만들어주면 되기 때문이다.
문제 풀이
1. javascript
function solution(x, n) {
var answer = Array.from({length : n}, (_,i)=> x+(x*i))
return answer;
}
2. python
def solution(x, n):
answer = []
for i in range(n) :
answer.append(x+(x*i))
return answer
챌린저문제 : 숫자 카드 나누기
걸린시간 : 1시간
권장시간 : 1시간
오늘의 회고
- 문제를 이해하기까지 오래걸렸다. 최대 공약수를 구하는 문제를 풀어본적있지만 3개 이상의 배열에서 어떻게 구해야 하는지 고민했다. 방법이 잘 안떠올라 구글링을 통해 아이디어를 얻을 수 있었다. 아무나 두수를 잡고 최대공약수를 구한 다음, 구한 최대공약수와 다른 숫자를 잡고 최대공약수를 구하는 공식을 반복한다. (참조 : 블로그)
- 그리고 최대 공약수를 구하기 위해 '유클리드 호제법'을 사용했다.
☞ 유클리드 호제법 : 2개의 자연수 a, b에 대해 a를 b로 나눈 나머지를 r이라 하면, a와 b의 최대공약수는 b와 r의 최대공약수와 같다. 따라서 b를 r로 나눈 나머지r1를 구하고 다시 r을 r1으로 나눈 나머지를 구하는 과정을 반복하여 나머지가 0이 되었을 때, 나누는 수가 최대공약수가 된다.
- 최대 공약수는 유클리드 호제법으로 해결해보자!
문제 풀이
1. javascript
function gcd_list(arr){
let num = arr[0];
for(let i=1; i<arr.length ;i++){
num = gcd(num, arr[i]);
}
return num;
}
function gcd(a, b) {
while(b>0) {
let c = a % b;
a = b;
b = c;
}
return a;
}
function solution(arrayA, arrayB) {
var answer = 0;
// 첫번째 조건 : 철수의 최대 공약수, 영희의 약수가 아니다.
let gcdA = gcd_list(arrayA);
if(gcdA !== 1 && arrayB.filter(i=>i%gcdA === 0).length < 1) answer = gcdA;
// 두번쨰 조건 : 영희의 최대 공약수, 철수의 약수가 아니다.
let gcdB = gcd_list(arrayB);
if(gcdB !== 1 && arrayA.filter(i=>i%gcdB === 0).length < 1) answer = Math.max(answer, gcdB);
return answer;
}
2. python
def gcd_list(arr) :
n = arr[0]
for i in arr[1:] :
n = gcd(n, i)
return n
def gcd(a, b) :
while b != 0 :
a, b = b, a % b
return a
def solution(arrayA, arrayB):
answer = 0
# 철수의 최대공약수는 영희의 약수가 아니다.
gcdA = gcd_list(arrayA)
if gcdA != 1 and all(b % gcdA != 0 for b in arrayB) : answer = gcdA
# 영희의 최대공약수는 철수의 약수가 아니다.
gcdB = gcd_list(arrayB)
if gcdB != 1 and all(a % gcdB != 0 for a in arrayA) : answer = max(answer, gcdB)
return answer
'TIL' 카테고리의 다른 글
99클럽 6일차 TIL (240727) (0) | 2024.07.27 |
---|---|
99클럽 5일차 TIL (240726) (0) | 2024.07.26 |
99클럽 4일차 TIL (240725) (0) | 2024.07.25 |
99클럽 3일차 TIL (240724) (0) | 2024.07.24 |
99클럽 코테 스터디 1일차 TIL (240722) (3) | 2024.07.22 |