캐또's coding

2588 - 곱셈 - node.js 본문

기초 공부/백준 문제 풀이

2588 - 곱셈 - node.js

JS_K_coding 2022. 8. 12. 11:44

 

문제

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

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

입력

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

출력

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

예제 입력 1 복사

472
385

예제 출력 1 복사

2360
3776
1416
181720

알고리즘 분류


세 자리 곱하기 세 자리의 문제다. 다만 출력으로는 결과만 내는 것이 아니라 중간 과정을 보여줘야 한다는 점인데, 4개의 결과를 출력하면 된다. 두 수 A, B에 대해서, 첫 번째 줄은 A * (B의 일의 자리 숫자), 두 번째 줄은 A * (B의 십의 자리 숫자), 세 번째 줄은 A * (B의 백의 자리 숫자), 마지막 줄은 A * B 결과를 차례대로 출력하면 된다.

B의 각 자리 숫자를 구하는 것이 문제인데, 문자열이라면 잘라내는 것이 편하지만, 숫자일 경우에 특정 자리의 값을 구하는 방법도 알아볼 필요가 있었다.

const input = require('fs').readFileSync('/dev/stdin').toString().split('\n').map(Number);
const A = input[0];
const B = input[1];
const B1 = input[1] % 10;
const B10 = ((input[1] % 100) - (input[1] % 10)) / 10;
const B100 = ((input[1] % 1000) - (input[1] % 100)) / 100;

console.log(A * B1);
console.log(A * B10);
console.log(A * B100);
console.log(A * B);

우선 이번의 입력 값은 한 줄에 입력되는 것이 아니라 두 줄에 나눠서 입력되는 것이끼 때문에 split의 구분을 '\n' 즉 줄넘김 기호라고 해주는 것을 잊지 말아야 한다.

더 간단하게도 표시 가능하겠지만, 명확하게 의미를 드러나게 하기 위해서 수식에 들어갈 모든 값들을 각기 다르게 할당해주었다.

B1~ B100은 B의 일의 자리 수, 백의 자리 숫자를 의미하며,

B1: 입력된 세자리 값을 10으로 나누고 남은 값은 일의 자리이므로 B1에는 input[1]%10을 할당한다.

B10: 입력된 세자리 값을 100으로 나눈 나머지는 두자리 수, 일의 자리 숫자인 10으로 나눈 나머지를 빼면 'x0'으로 나올 것인데 그것을 10으로 나누면 'x'만 남는다. 즉 십의 자리 숫자만 남는다.

B100: 십의 자리 숫자가 나온 것과 같은 방법으로 백의 자리 숫자에 대해 계산하면 값을 얻을 수 있다.

각 수를 할당한 A, B, B1, B10, B100을 문제에 맞춰 출력하게 하면 문제 해결

Comments