본문 바로가기
Algorithm/- JavaScript

백준 2588번 - 곱셈 [Node.js]

by Yoojacha 2022. 5. 28.

문제

(세 자리 수) × (세 자리 수)는 다음과 같은 과정을 통하여 이루어진다.

(1)과 (2)위치에 들어갈 세 자리 자연수가 주어질 때 (3), (4), (5), (6)위치에 들어갈 값을 구하는 프로그램을 작성하시오.


입력

첫째 줄에 (1)의 위치에 들어갈 세 자리 자연수가, 둘째 줄에 (2)의 위치에 들어갈 세자리 자연수가 주어진다.


출력

첫째 줄부터 넷째 줄까지 차례대로 (3), (4), (5), (6)에 들어갈 값을 출력한다.


예제 입력 1 복사

472
385

예제 출력 1 복사

2360
3776
1416
181720

소스코드

const fs=require('fs');
const [num1, num2]=fs.readFileSync('/dev/stdin').toString().split('\n').map(Number);

const oneNum=num2%10;
const tenNum=Math.floor((num2%100)/10);
const hundredNum=Math.floor(num2/100);

console.log(num1*oneNum);
console.log(num1*tenNum);
console.log(num1*hundredNum);
console.log(num1*num2);

- map메소드를 사용하는 방식이 직관적이고, 파이썬에서 사용하던 것과 비슷해서 이해가 잘 되었다.

- oneNum, tenNum, hundredNum으로 각각 1의 자리, 10의 자리, 100의 자리 숫자 값을 할당한다.

- 각각 만들어준 변수 값을 통해 console.log를 4번 하여 원하는 출력을 한다. 

const fs=require('fs');
const [num1,num2]=fs.readFileSync('/dev/stdin').toString().trim().split('\n');
const num=parseInt(num1);
const multipleNum=num2.split('').map(Number);
let result=multipleNum.reverse().map(x=>x*num);
result.push(num*parseInt(num2));
console.log(result.join('\n'));

- 새로운 방식의 접근이라 이해하는데 오래걸렸다. 이 방식은 배열 객체를 이용해 코드를 간결하게 만들었으나 이해도가 낮아서 가독성이 좋지 않았다. 

- 문제에 대해서 이해하면, (3), (4), (5)를 얻기 위해서는 입력의 두번 째 줄의 숫자를 한글자씩 쪼개서 첫번째 줄 숫자와 곱해야하는 문제이다. 따라서 입력값을 \n로 두 개의 변수로 받은 후 -> 두번 째 변수를 1의 자리 ,10의 자리, 100의 자리 숫자로 나누어 3 개의 새로운 변수에 할당한 후 하나씩 곱해주면 된다.

- 2줄 : 위 소스코드는 [num1, num2]로 변수를 할당한 것이 특징이고, split 메소드에서 \n 를 사용했다.

- 4줄 : 385 값을 split('')으로 하나씩 쪼개서 문자열의 값을 가진 배열로 만든후, map(Number)로 숫자 타입으로 변환한다.

- 5줄 : result 변수에 3, 8, 5를 순서를 뒤집어 5, 8, 3 순서로 각각 num1과 곱해서 mapping을 해서 할당한다.

- 6줄 : result 변수에 num1 * num2 값을 배열 제일 뒤에 넣는다.

- 7줄 : 배열.join('\n')을 통해 배열 안의 4 개의 값을 한번에 \n를 사용하여 출력을 한다. (console.log를 4번 안해서 좋다.)


후기

- 두가지 코드를 비교해 봤을 때 분명 쉬운 문제였으나 두번째 코드는 이렇게 짠 사람의 의도를 이해하는데 시간이 상대적으로 첫번째 코드보다 오래걸렸는다. --> 이는 배열을 사용하고, 뒤에서 map(Number)와 parseInt(num2)를 사용하고 join('\n')을 사용해서 초반의 변수 선언과 할당 단계에서 끝내지 않고 코드 중간에서도 계속 변수 식별자에 꼬리를 물듯이 명시적으로 타입변환이 일어나고 출력 방식이 변해서 더 헷갈리게 만드는 것 같다.

- .split(), .map() .join()을 활용한 데이터 타입 변환, 데이터 표현 방식 변환하는 것이 파이썬과 비슷해 금방 이해했다.


참고

https://velog.io/@wiostz98kr/%EB%B0%B1%EC%A4%80-2588%EB%B2%88-%EA%B3%B1%EC%85%88

 

댓글