티스토리 뷰

//🍕백준문제 2588번
//fs모듈로 여러줄 입력값을 받아오는 법
//e.g.) let input = fs.readFileSync('text.txt','utf8').split('\n');

/*
입력 예제
472
385
*/
/*
출력 예제
2360
3776
1416
181720
*/

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

const [firstNum, secondNum] = data;
const [a, b, c] = secondNum;

let ac = firstNum * c;
let ab = firstNum * b;
let aa = firstNum * a;

console.log(ac);
console.log(ab);
console.log(aa);
console.log(firstNum * secondNum);
  • 문제를 처음봤을 때는 카라추바 알고리즘을 써야하나 생각했다. 해당 알고리즘에 대해서 제대로 아는 바가 없어서 어떻게 적용해야 하나 골머리 썩혔는데 의외로 쉽게 풀 수 있는 문제였다. 
  • 의아했던 점은 입력값을 받아올 때 형변환(string -> number)을 하지 않았는데 정상작동을 하길래 뭐지 싶었다. 
// 해당 코드는 문자열-> 숫자로 데이터타입을 변환하지 않았는데 정상작동 됐다.
// 왜 그런 지 확인해보니 사칙연산 중 덧셈을 제외하면 숫자/문자형 상관없이 계산이 된다고 한다.
// 심지어 연산이 끝난 string은 number로 자동 형변환이 된다. 
{
  const num1 = '10';
  const num2 = '20';
  const result = num1 * num2;
  console.log(typeof result); // number로 자동 형변환
}

위의 예시코드는 number를 담고있는 변수 두 개를 연산했을 때 결과를 보여준다.

  • JS는 사칙연산 중 덧셈(+)을 제외하면 숫자/문자형 상관없이 연산이 가능하다. (아래에 자세한 설명 참고)

하지만 데이터가 커지거나 연산이 복잡해질 때는 형변환을 명시적으로 해주는 것이 가독성에도 좋을 거 같음


🍕JS 암시적 형변환(자동 형변환; implicit type conversion)

- 명령어를 수행하는 과정 중에 자바스크립트엔진이 자동으로 변환한다. 

  • 암시적 형변환은 자바스크립트 컴파일러에 의해 자동으로 일어난다. 
  • 특정 타입의 값을 기대하는 곳에서 다른 타입의 값이 오면, 자동으로 타입을 변환하여 사용하는 것

🍕자동 자료 변환시 +(더하기) 연산자

  • 자동 자료 변환시 + 연산자는 문자열이 숫자보다 우선시된다. (문자열 > 숫자) 
  • 더하기를 제외한 나머지 사칙연산자는 숫자가 문자열보다 우선시된다. (숫자 > 문자열) -> 이 이유때문에 위의 문제에서 string * string = number 로 제대로 된 연산을 수행했다고 생각한다. 
댓글