Lsiron
코딩테스트 7(배열 초기화, \n을 포함한 표현식 삽입, 유클리드 호제법-최대공약수, 최소공배수) 본문
문제 1. 행렬의 덧셈
행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.
풀이=해답.
function solution(arr1, arr2) {
let answer = [[]];
for (let i=0; i<arr1.length; i++){
answer[i] =[];
for(let j=0; j<arr1[i].length; j++){
answer[i].push(arr1[i][j] + arr2[i][j]);
}
}
return answer;
}
=> 근본으로 풀었다. 2차원 배열을 초기화 시킨 후, 반복문을 통해 두 배열의 각 배열 속 배열 요소를 더한 값을 넣어 주었다.
// 배열의 초기화 방법을 숙지해야겠다고 생각했다. 2차원 배열의 초기화 방법을 모르니 문제풀이가 너무 한정되어 있었다.
배열의 초기화 방법 참조 : https://velog.io/@minukbak/301
문제 2. 직사각형 별찍기
이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다.
별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요.
풀이 = 해답.
function solution(n, m) {
let answer = `${"*".repeat(n)}\n`
return answer.repeat(m)
}
=> 별찍기 하면 흔히 반복문을 사용하지만, 그냥 repeat 함수를 이용해서 간단하게 찍어보았다.
// \n 을 사용할 때 자꾸 오류가 나서 어떻게 넣어야 할지 이것저것 해보다가 백틱을 넣어서 겨우 만들 수 있었다. 표현식 삽입은 이렇게 할 때도 있는 것을 알았다.
문제 3. 최대공약수와 최소공배수.
두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.
풀이 = 해답.
function solution(a, b) {
const gcd = (a, b) => a % b === 0 ? b : gcd(b, a % b);
const lcm = (a, b) => a * b / gcd(a, b);
return [gcd(a, b), lcm(a, b)];
}
=> 유클리드 호제법으로 풀었다. gcd는 최대공약수 , lcm은 최소공배수로, 최대공약수의 경우, a를 b로 나눴을때 나머지가 0이 될 때 까지 (b, a%b) 를 인자로 넣고 돌리는 것이다. 그러다가 a%b의 나머지가 0이 되는 경우 b를 반환.
최소공배수는 a와 b를 곱한 값에 최대공약수를 나누면 되기에 쉽게 구할 수 있다.
하루 총평.
점점 문제가 어려워지기 시작한다. 공부를 하지 않으면 너무나도 복잡하게 풀리거나, 시간이 오래 걸리거나 둘 중 하나이다. 이제 제한시간을 정해놓고 풀리지 않으면 AI를 통해 답안을 본 후, 학습하는 방향으로 해야겠다.
'코딩테스트 > Java Script' 카테고리의 다른 글
코딩테스트 9(sort, break, slice) (0) | 2024.06.30 |
---|---|
코딩테스트 8(filter) (0) | 2024.06.07 |
코딩테스트 6(Math.sqrt, isInteger, split, sort, reverse, join, isNaN, parseInt) (0) | 2024.06.04 |
코딩테스트 5(filter, Math.min, substr, Math.floor, repeat, slice) (0) | 2024.05.25 |
코딩테스트 4(reduce, filter, repeat, slice) (0) | 2024.05.24 |