728x90

문제


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

 

코딩테스트 연습 - 내적

길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요. 이때, a와 b의 내적은 a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의

programmers.co.kr

 

코드


function solution(a, b) { //for문을 이용한 풀이
    let answer = 0;
    let i;
    
    for (i=0; i<a.length; i++) {
        answer += a[i]*b[i];
    }

    return answer;
}

 

function solution(a, b) { //reduce를 이용한 풀이
    return a.reduce((acc, cur, i) => acc += a[i]*b[i], 0);
}

 

후기


  • for문과 reduce 각각 이용하여 풀이를 해보았다
  • 둘 다 간결한 코드지만 확실히 reduce는 사용법을 알고 나니 한 줄 풀이가 되는 게 신기했다
728x90

문제


https://programmers.co.kr/learn/courses/30/lessons/76501

 

코딩테스트 연습 - 음양 더하기

어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 re

programmers.co.kr

 

코드


function solution(absolutes, signs) {
    let answer = 0;
    let i, j;

    for (i=0; i<signs.length; i++) {
        if (signs[i] === true) {
            absolutes[i] = absolutes[i] * 1;
        }
        else absolutes[i] = absolutes[i] * -1;
    }

    for (j=0; j<absolutes.length; j++) {
        answer += absolutes[j]
    }

    return answer;
}

 

후기


  • 이 문제는 '없는 숫자 더하기' 문제와 매우 비슷하다고 느꼈고 reduce 함수를 이용해서 풀어보려 했으나 사용법이 익숙치 않아서 결국 for문으로 풀게 되었다
  • 다른 분들의 풀이에 reduce와 삼항 연산자를 이용하여 한 줄 풀이 한 것을 보았다
  • 삼항 연산자는 "조건문 ? 선택문1 : 선택문2" 의 구조로 이루어져 있고, 조건문이 true일 때, 선택문1이, false일 때, 선택문2가 실행된다
  • 삼항연산자에 대해 찾아보던 중에 JavaScript에서는 '?'가 삼항연산에서뿐만 아니라 더 다양한 쓰임새가 있다는 것을 알게 되었고 밑의 링크는 참고한 블로그이다
  • https://ichi.pro/ko/javascript-ui-mabeob-217281274422961
728x90

문제


https://programmers.co.kr/learn/courses/30/lessons/86051

 

코딩테스트 연습 - 없는 숫자 더하기

0부터 9까지의 숫자 중 일부가 들어있는 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요. 제한

programmers.co.kr

 

코드


function solution(numbers) {
    let i, j;
    let answer = 0;
    let num = [0,1,2,3,4,5,6,7,8,9];

    for (i=0; i<numbers.length; i++) { //numbers에 0~9가 있는지 확인
        if (num.includes(numbers[i])) {
            num[numbers[i]] = 0; //0~9가 있으면 num배열에 해당 값을 0으로 만들기
        }
    }

    for (j=0; j<num.length; j++) { //num배열에 남아있는 값 더하기
        answer += num[j]
    }

    return answer;
}

 

후기


728x90

문제


https://programmers.co.kr/learn/courses/30/lessons/12977

 

코딩테스트 연습 - 소수 만들기

주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때

programmers.co.kr

 

코드


function solution(nums) {
    let answer = 0;
    const len = nums.length;
    
    for (let i=0; i<len; i++) { //배열 안에서 서로다른 3개의 수를 더하기
        for (let j=i+1; j<len; j++) {
            for (let k=j+1; k<len; k++) {
                let sum = nums[i] + nums[j] + nums[k];

                if (isPrime(sum)) { //소수라면 정답 count++
                    answer++;
                }
            }
        }
    }

    function isPrime(sum) {
        if (sum < 2) return true;
        for (let i=2; i<sum; i++) { //1외에 숫자 하나라도 나누어떨어지면 소수탈락
            if (sum % i == 0) return false;
        }
        return true;
    }

    return answer;
}

 

후기


  • 배열에서 서로 다른 3개의 수를 뽑기 위해서는 3중 for문을 써야 한다는 것을 깨달음
  • n중 for문이 되어버리면 이게 맞나 하고 의심부터 하게 되는데 다행히 다른 분들의 코드에서도 3중 for문이 많아서 안심했다

+ Recent posts