[6/15 TIL](A+B) 문제 풀이 / 자바스크립트 기초 시험 오답노트

haegnim·2023년 6월 15일
0

TIL

목록 보기
12/52
post-thumbnail

(A+B) 문제 풀이

reduce 메서드 사용해보기

적용 전
이전에 풀었던 문제 경험을 바탕으로 split().map(Number)로 배열로 만들었다.
map에 대해 찾아보던 중 reduce 메서드를 발견했는데 이 문제에 적절할 것 같아 적용해 보기로 하였다.

const rl = require('readline').createInterface({ input: process.stdin });
rl.on('line', (answer) => {
    let inputArr = [];
    inputArr = answer.split(' ').map(Number);
    console.log(inputArr[0] + inputArr[1]);
});

적용 후
덧셈 과정만 reduce로 구현했다. 뭐랄까 메서드를 한 줄로 줄줄이 엮어서 사용해 본 게 처음이라 좋았다. reduce를 쓰면 map을 안쓰고 할 수 있을 것 같았는데 answer의 값은 문자열로 받아와서 데이터타입으로 number로 형 변환을 거쳐야 +으로 연산이 가능해진다.

rl.on('line', (answer) => {
    let inputArr = answer.split(' ').map(Number).reduce((acc, cur) => {acc + cur;});
    console.log(inputArr);
});

+연산자와 다른 연산자의 차이
+연산자는 더할려는 두 값 중에 문자열이 있으면 암시적으로 문자열로 변환하므로 map을 통해 문자열 전체를 number로 바꿔주었지만 다른 연산자는 둘 중에 하나가 문자열이어도 연산이 가능하다.
그래서 - , * , / , %은 아래와 같은 코드로도 연산이 가능하다.

rl.on('line', (answer) => {
    let inputArr = answer.split(' ').reduce((acc, cur) => {acc + Number(cur);});
    console.log(inputArr);
});

자바스크립트 기초 시험 오답노트

항해99 정규 시작 후 첫 시험이었다. 10문제 중 9문제를 맞히고 1문제를 틀렸다.

문제
다음은 십의 자리 이하를 버리는 코드입니다. 변수 value의 값이 356이라면, 300이 나올 수 있도록 빈칸에 알맞은 코드를 넣어주세요.

let value = 356;
console.log( (빈칸) );

내 답안
그 동안 문자열을 알파벳 단위로 나눠 배열에 저장하고 수정하는 코드를 많이 썼다보니 같은 방식으로 접근했었다.
당연하지만 오류가 뜬다.
1. value의 변수 값의 데이터타입은 number니까! split는 문자열을 배열로 변환하므로 여기서는 변환이 불가하다.
2. splice는 배열을 수정,제거하므로 배열이 아닌 value을 수정해서 배열을 반환해주지 않는다.

let value = 356;
console.log(value.split('').splice(1, 2, '00'));

모범답안
1. 가장 많은 사람들이 제출한 답안이 아닐까.
Math.floor는 많이 쓰일 것 같아서 먼저 정리해봤다.
Math.floor는 소수점 아래의 수를 전부 버린다.
-> value를 100으로 나눠 3.56으로 만들어진 값의 .56를 삭제한다.
-> 100을 곱해주면 300이 되므로 정답

Math.floor(value / 100) * 100

2.replace는 문자열에서 특정 부분을 다른 문자열로 대체하는 메서드다. 주어진 문자열에서 첫 번쨰로 발견되는 부분을 찾아 대체 문자열로 바꿔준다.

value.toString().replace(/56/g, '00')

0개의 댓글