문제

 

풀이 코드

function solution(s) {
    let str;
    str = s.replace(/[^0-9]/g, '');
    return (str === s) && (s.length == 4 || s.length == 6);
}

 

풀이 과정

정규식을 이용하여 풀이 하였다!

정규식과 문자열의 replace 함수를 이용하여 

문자열중, 숫자로 이루어진것만 뽑아내어 str에 저장하였고, str 과 s 가 같은지 비교, 길이를 비교하여 return 하였다.

나름 잘 풀었다고 생각하지만 return 할때 너무 길어져서 답답했다

 

그래서 다른사람의 코드풀이를 봤다.

 

 

다른사람의 코드

function alpha_string46(s){
  var regex = /^\d{6}$|^\d{4}$/;
  return regex.test(s);
}

 

test 함수는 뭐지

이분도 정규식으로 풀었지만 내 코드에 비해 너무 간결하다

 

test 함수가 뭔지 알아봐야 할거 같다

문제

 

풀이 코드

function solution(arr) {
    return (arr.reduce((sum,current) => sum + current, 0) / arr.length)
}

 

풀이 과정

간단하게 reduce 함수를 통하여 배열의 모든 요소를 더하고, 배열의 길이로 나누어 평균값을 return 하였다.

문제

 

풀이 코드

function solution(n) {
  return (n + '').split('').map((num) => num * 1).reverse();
}

 

풀이 과정

자바스크립트의 배열 및 문자혈의 함수를 이용해 잘 풀어냈다!!

n + '' 를 통하여 문자열로 변환하고,

split 을 통해 각 요소를 분리하여 배열에 저장하고!

map 함수를 통해 String 을 Number형으로 변환하고!

reverse 를 통해 모든 요소를 뒤집었다!

 

아니 잘 풀었다고 생각했다,

대부분 나처럼 풀었겠지? 생각하고 다른 사람의 풀이를 봤다

 

다른사람의 풀이

function solution(n) {
    let arr = [];

    do {
        arr.push(n%10);
        n = Math.floor(n/10);
    } while (n>0);

    return arr;
}

이렇게 풀면 형변환을 2번이나 해야하는 수고로움이 없어진다

반성하자 반성!

 

* Math.floor 함수 숙지하기

문제

 

풀이 코드

function solution(n) {
  let arr = [];
  n = String(n);

  for (let i = 0; i < n.length; i++) {
    arr.push(n[i]);
  }
  return arr.reduce((sum, current) => sum + Number(current), 0);
}

 

풀이 과정

입력받은 n 은 Number 타입이기 때문에 우선 String 타입으로 강제 형변환을 수행했고,

for 문을 돌려 각 인덱스를 배열에 할당했다

 

그리고 해당 배열에 대해 reduce 함수를 이용하여 각 자리수를 더하는 방식으로 수행했다.

 

숫자들을 10으로 나누고 나머지구하고 등등.. 하는거보단 효율적으로 구현했지만 아무리 봐도

 

강제 형변환, for 구문, 문자열을 배열에 저장 등등.. 너무 비효율 적인 부분이 많은거 같아 다른사람의 코드를 보았다

 

다른사람의 풀이

// 다른 사람의 풀이 1
function solution(n){
    return (n+"").split("").reduce((acc, curr) => acc + parseInt(curr), 0)
}

// 다른 사람의 풀이 2
function solution(n){
    return String(n).split('').reduce((a,c)=>a+c*1, 0);
}

split 과 reduce 를 적절히 조합하여 구현했다

 

아.. 어제부터 느끼는데 진짜 JS 의 기초 문법 문자열 함수, 배열 함수 등등을 많이 써보고 공부해 볼 필요가 있다

 

어떤함수 인지 아는데 생각이 안나는건.. 아직 많이 사용 안해봐서 for 문만 쓰게 되는거겠지

더 공부해야겠다

 

+) 문자열을 number로 변환하기 위해서는 문자에 연산을 수행하면 Number로 바뀐다 ( '4' * 1 = 4 )

Number형을 문자열로 변환하려면 빈문자 ''를 더하면 된다 ( 4 + '' = '4' )

 

이것도 중요한 팁이 될수 있다

문제

 

풀이 코드

function solution(arr1, arr2) {
    let row = arr1.length;
    let column = arr1[0].length;
    let answer= [[]];
    
    for(let i = 0; i < row; i++) {
        answer[i] = [];
        for(let j = 0; j < column; j++) {
            answer[i].push(arr1[i][j] + arr2[i][j]);
        }
    }
    return answer;
}

 

풀이 과정

2차원 배열을 사용하여 풀면 된다.

배열의 요소를 추가하는 push 함수를 이용하여 구현하였다

 

역시 너무 코드가 길다고 생각되어 다른 사람의 풀이 코드를 봤다

 

다른사람의 코드

function solution(arr1, arr2) {
    return arr1.map((a,i) => a.map((b, j) => b + arr2[i][j]));
}

고차함수인 map 함수를 사용하면서 한줄로 깔끔하게 끝났다

 

역시 고차함수와 자바스크립트의 기초에대해 익숙해 져야 겠다

+ Recent posts