Algorithm/programmers

Programmers Level 2 연습문제모음 ( JavaScript )

takeU 2021. 7. 18. 23:57
반응형

Level 2 연습문제 ( JavaScript )

작성한 코드보다 더 좋은 코드가 있음을 미리 알려드리며,

코드의 해설이 필요하신 분은, 댓글 남겨주시면 적어놓겠습니다.

목차

  1. N개의 최소공배수
  2. JadenCase 문자열 만들기
  3. 행렬의 곱셈
  4. 피보나치 수
  5. 최솟값 만들기
  6. 최댓값과 최솟값
  7. 숫자의 표현
  8. 땅따먹기
  9. 다음 큰 숫자
  10. 올바른 괄호
  11. 124 나라의 숫자

 

풀이

1. N개의 최소공배수

function solution(arr) {
    const gcd = (a, b) => b ? gcd(b, a % b) : a
    return arr.reduce((a, b) => a * b / gcd(a, b))
}

2. JadenCase 문자열 만들기

function solution(s) {
    return s.split(' ').map(a => a === '' ? a : a[0].toUpperCase() + a.slice(1).toLowerCase()).join(' ');
}

3. 행렬의 곱셈

function solution(arr1, arr2) {
    const res = Array.from(Array(arr1.length), () => new Array(arr2[0].length))
    for ( let i = 0; i < arr1.length; i++ ) {
        for ( let j = 0; j < arr2[0].length; j++ ) {
            res[i][j] = arr1[i].map((a,idx) => a*arr2[idx][j]).reduce((a,b) => a+b)
        }
    }
    return res
}

4. 피보나치 수

function solution(n) {
const arr = [0, 1];
  if ( n < 2 ) return arr[n];
  let cur = 1;
  while ( ++cur <= n ) {
    arr.push((arr[cur-1] + arr[cur-2]) % 1234567);
  }
  return arr[n] ;
}

5. 최솟값 만들기

function solution(A,B){
    A = A.sort((a,b) => a-b)
    return B.sort((a,b) => b-a).map((b,i) => b*A[i])
        .reduce((a,b) => a+b)
}

6. 최댓값과 최솟값

function solution(s) {
    const arr = s.split(' ').map(a => +a).sort((a,b) => a-b)
    return `${arr[0]} ${arr.slice(-1)[0]}`
}

7. 숫자의 표현

function solution(n) {
    let count = 1
    const check = (num, t) => {
        let acc = 0;
        while ( acc < t ) {
            acc += num
            num++
            if ( acc === t ) return true
        }
        return false;
    }

    for ( let i = 1; i <= parseInt(n/2); i++ ) {
        if ( check(i, n) ) count++
    }
    return count;
}

8. 땅따먹기

function solution(land) {
    for ( let i = 1; i < land.length; i++ ) {
        for ( let j = 0; j < 4; j++ ) {
            const arr = land[i-1].slice();
            land[i][j] += j === 0 ?
                Math.max(...arr.slice(1)) :
                Math.max(...arr.slice(0, j), ...arr.slice(j+1))
        }
    }
    return Math.max(...land[land.length-1])
}

9. 다음 큰 숫자

function solution(n) {
    let result = 0;
    for ( let i = n+1; i < n+10; i++) {
          if ( n.toString(2).match(/1/g).length == i.toString(2).match(/1/g).length) return i
  }
}

10. 올바른 괄호

function solution(s){
        let count = 0;
    for ( let i = 0; i < s.length; i++ ) {
        if ( count < 0 ) return false;
        s[i] === '(' ? count++ : count--;
    }
    return !count; 
}

11. 124 나라의 숫자

function solution(n) {
    let res = '';
    while ( n > 0 ) {
        switch ( n % 3 ) {
            case 0:
                res = '4' + res
                n = n/3 - 1
                break;
            case 1:
                res = '1' + res
                n = Math.floor(n/3)
                break;
            case 2:
                res = '2' + res
                n = Math.floor(n/3)
                break;
        }
    }
    return res
}