문제

 

풀이 코드

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 함수를 사용하면서 한줄로 깔끔하게 끝났다

 

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

문제

 

풀이 코드

function solution(x, n) {
  var answer = [x];
  for (let i = 0; i < n - 1; i++) {
    answer.push(answer[answer.length - 1] + x);
  }
  return answer;
}

 

풀이 과정

배열 초기 값을 입력들어온 x 하나만 넣고

배열의 push 함수를 사용하여 배열의 요소를 계속 추가해 주었다.

 

추가 하는 방식은, 배열의 마지막 요소를 기준으로 x 값을 계속 더해주면서 추가했다!

 

다른 풀이과정에서 fill 과 map 을 사용한 풀이도 있었지만, 내가 푼 방식으로도 충분하다는 생각이 들었다.

문제

 

풀이 코드

process.stdin.setEncoding('utf8');
process.stdin.on('data', (data) => {
  const n = data.split(' ');
  const a = Number(n[0]),
    b = Number(n[1]);
  writeStar(a, b);
});

function writeStar(a, b) {
  let starCount = '';
  for (let i = 0; i < a; i++) {
    starCount += '*';
  }

  for (let i = 0; i < b; i++) {
    console.log(starCount);
  }
}

 

풀이 과정

starCount 라는 변수에 for 반복문을 사용하여 * 을 a 입력만큼 저장 하였고,

b 만큼 starCount 를 출력했다.

 

풀면서도 너무 비효율적인거 같아 고민하다가 다른사람의 풀이를 보았다.

 

다른사람의 풀이

process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
    const n = data.split(" ");
    const a = Number(n[0]), b = Number(n[1]);
    console.log((('*').repeat(a)+`\n`).repeat(b))
});

 

기초가 중요한 이유가 여기있다

 

for 를 남발하지 않고도 간략하게 repeat 함수를 이용하여 구현 할 수 있는 문제였다.

 

오늘은 repeat 함수에 대하여 공부해 봐야겠다!

문제

 

풀이 코드

function solution(num) {
  return num % 2 == 0 ? 'Even' : 'Odd';
}

 

풀이 과정

삼항 연산자를 이용하여 한줄의 코드로 표현할 수 있다

+ Recent posts