whatisthis?

❌백준 2588 javascript (node.js) 풀이 본문

ALGORITHM/BOJ (Node.js)

❌백준 2588 javascript (node.js) 풀이

thisisyjin 2021. 12. 6. 12:32

입출력과 사칙연산 - (11) 

 


 

💡문제

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

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

📁입력

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

📈출력

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

 


< 코드 >

 

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().split('\n');

const A = input[0];
const B = input[1];

const one = B % 10;
const ten = Math.floor((B % 100) / 10);
const hundred = Math.floor(B / 100);

console.log(A * one);
console.log(A * ten);
console.log(A * hundred);
console.log(A * B);

 

 

** 참고 **

javascript에서는 *(곱셈) 연산자는 string으로는 할 수 없으므로

자동으로 string->number로 계산해준다! 참으로 친절한 언어이다 :)

 

- 더하기의 경우에는 "2"+"3" = 23 이 가능하지만

- 곱셈은 "2" * "3" = 6으로 자동으로 바꿔서 처리함.

 

 

 

 

 

 

아무리 해도 안나와서 결국 구글링해서 풀었다.

너무 무지성으로 무턱대고 풀었던 것 같아 반성중.. 

 

 


 

 

 

*** 내가 헤맸던 이유. 💢💢💢 

 

 

1. 문제를 제대로 안읽었다.

 

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

입력 조건을 제대로 안보고 한자리씩 입력하는 줄 알고 이렇게 풀었었다.

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().split(' ');

const [A,B,C,D,E,F] = input;

console.log((100*A+10*B+C)*F);
console.log((100*A+10*B+C)*E);
console.log((100*A+10*B+C)*D);
console.log((100*A+10*B+C)*(100*D+10*E+F));

 

 

 

2. Math.floor 까지는 접근했으나 그 이후에 막혔다.

 

 

우선 두번째 수인 B의 각 자리를 나눠야겠다! 까지는 생각했는데

그 이후에 그걸 하기위해 

    ㄴ 혹시 문자열로 바꾼다음에 나눠야하나?

        ㄴ split으로 나눈다면, 무슨 기준으로 나누지? 띄어쓰기를 기준으로 나눌수도 없으니.

 

    ㄴ 그럼 숫자상태에서 처리해야하나보다.

       ㄴ 반올림 Math 메소드들을 이용하자

           ㄴ 뭔가 내림이 필요할 것 같으니 Math.floor이구나.

 

472를 기준으로 생각하면

472 / 100 = 4.72 이고

Math.floor(4.72) = 4이다. 이게 백의자리수구나.

 

ㅡ까지는 생각을 했는데

 

 

일의자리는

472 - (Math.floor(472/10)*10)

= 472 - 470 = 2

 

이렇게 생각했다.

아무리 생각해도 너무 복잡+굳이? 싶은 코드였다.

 

암튼 일의자리는 생각까진 했는데

십의자리에서 막혔다.

 

십의자리는

(472 - 400 - 2) / 10 을 해야한다고 생각했다.

그러면 코드가 매우 복잡해지고.. 효율도 떨어지고.. 

여기서 영 아니다 싶어서 포기하고 구글링함. 

 

 

 

3. 나머지 연산자를 아예 생각 못함.

 

나머지 연산자가 해결사였는데,

그냥 무턱대고 나누기와 곱셈/ 뺄셈만으로만 하려니까

(472 - 400 - 2) / 10

이따구의 코드만 생각났다.

 

나머지(%) 연산자 이용하면

 

1의자리 ) 472 % 10 = 2 

10의자리 ) Math.floor(472 % 100 / 10) = Math.floor(7.2) = 7

100의자리 ) Math.floor(472 / 100) = Math.floor(4.72) = 4

 

이렇게 쉬운데 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,

 

 

 

 

그냥 너무 1차원적으로만 생각한 것 같다.

...