Lsiron

코딩테스트 7(배열 초기화, \n을 포함한 표현식 삽입, 유클리드 호제법-최대공약수, 최소공배수) 본문

코딩테스트/Java Script

코딩테스트 7(배열 초기화, \n을 포함한 표현식 삽입, 유클리드 호제법-최대공약수, 최소공배수)

Lsiron 2024. 6. 5. 14:06

문제 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를 통해 답안을 본 후, 학습하는 방향으로 해야겠다.