728x90

문제


https://programmers.co.kr/learn/courses/30/lessons/12918?language=javascript 

 

코딩테스트 연습 - 문자열 다루기 기본

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다. 제한 사항 s는 길이 1

programmers.co.kr

 

코드


function solution(s) {
    if (s.length !== 4 && s.length !== 6) return false;
    else return (s.match(/[^0-9]/g) === null) ? true : false;
}

 

후기


  • match() 함수는 찾고자 하는 문자가 없으면 null을 반환한다
728x90

문제


https://programmers.co.kr/learn/courses/30/lessons/12935?language=javascript 

 

코딩테스트 연습 - 제일 작은 수 제거하기

정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1

programmers.co.kr

 

코드

 


function solution(arr) {
    let answer = [...arr]; //깊은 복사
    if (arr.length === 1) return [-1];
    else {
        const min = arr.sort((a,b)=>(a-b)).shift(); //최소값 반환
        answer = answer.filter((i) => i !== min);
        return answer;
    }
}

 

후기


  • 기존의 arr를 deep copy 해놓을 answer 배열을 준비하고, arr를 정렬하여 shift() 함수를 통해 enQueue처럼 제일 첫 원소를 반환한다. deep copy해놓은 answer배열에서 shift()를 통해 찾은 최소값을 filter함수를 통해 제거해준다
728x90

문제


https://programmers.co.kr/learn/courses/30/lessons/12940?language=javascript 

 

코딩테스트 연습 - 최대공약수와 최소공배수

두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의

programmers.co.kr

 

코드


function solution(n, m) {
    const biggest = (a, b) => {
        if (b === 0) return a;
        return biggest(b, a % b); //재귀
    };
    const minimum = (a, b) => {
        return (a * b) / biggest(a, b);
    };
    return [biggest(n, m), minimum(n, m)];
}

 

후기


  • 우선 이 문제를 풀기 위해서는 유클리드 호제법에 대해 알아야 했다 (그래야 최대공약수를 구할 수 있다)
  • 최소공배수는 유클리드 호제법을 통해 얻은 두 수의 최대공약수를 통해 (a * b) / a, b의 최대공약수 를 통해 쉽게 얻을 수 있었다
  • 유클리드 호제법을 이해하는 데 살짝 시간이 걸렸지만 직접 쓰면서 하나하나 이해하고나니 쉬웠다
728x90

문제


https://programmers.co.kr/learn/courses/30/lessons/12950?language=javascript 

 

코딩테스트 연습 - 행렬의 덧셈

행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요

programmers.co.kr

 

코드


  • 나의 풀이
function solution(arr1, arr2) {
    let answer = [];
    
    for (let i=0; i<arr1.length; i++) {
        let tmp = [];
        for (let j=0; j<arr1[i].length; j++) {
            tmp.push(arr1[i][j]+arr2[i][j]);
        }
        answer.push(tmp);
    }
    return answer;
}

 

  • 다른 분의 풀이1
return arr1.map((element, i) => arr2[i].map((e, j) => arr1[i][j] + arr2[i][j]));

 

  • 다른 분의 풀이2
function solution(arr1, arr2) {
    let answer = [[]];
    
    for (let i=0; i<arr1.length; i++) {
        answer[i] = []; //tmp배열을 새로 만드는대신
        for (let j=0; j<arr1[i].length; j++) {
            answer[i].push(arr1[i][j]+arr2[i][j]);
        }
    }
    return answer;
}

 

후기


  • 자바스크립트로 2차원 배열을 생성하고 값을 넣는 방법을 터득하기 딱 좋은 문제였다
  • 나는 tmp까지 이용하며 좀 비효율적으로 풀이를 하였는데, 다른 분의 풀이 중에 나랑 비슷하지만 이차원 배열을 arr = [[]];로 선언하고 값을 넣을 때도 arr[i] = [];로 2차원 배열에 값을 넣는 방법이 있었다
  • map함수를 이용해서도 2차원 배열에 값을 넣는 방법도 알 수 있었다

+ Recent posts