a와 b 출력하기(템플릿 리터럴)
이제 한문제 풀었으니 수월할 줄 알았으나! 크나큰 오산.
다시 열심히 검색을 돌렸따.
문제
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let input = [];
rl.on('line', function (line) {
input = line.split(' ');
}).on('close', function () {
console.log(Number(input[0]) + Number(input[1]));
});
여기서 우선
1. readline 모듈 공백문자 기준 분리
input = line.split(' ');
이게 궁금해서 찾아봤다. readline 모듈로 입력받은 값을 공백을 기준으로 한 줄씩 산출하는 방법이다.
자세한건 여기 참고.
https://velog.io/@zaman17/node.js-자바스크립트-콘솔로-값-입력받기
[ node.js ] 자바스크립트 콘솔로 값 입력받기
js를 공부하면서 한번도 콘솔로 값을 받아서 사용하는 문제는 풀어지 못했는데 node.js 영역이여서 그랬나보다이 방법으로 백준에서 js 문제를 풀 수 있다고 하니 정리해보자: readline 모듈은 한 번
velog.io
2. 입력받은 값 출력하기 - console.log(${값});
console.log(${값});
이게 뭔데
뭔데. 뭔데....!!!!!!!!!!!
미친듯이 찾아봤지만 나의 구글링 실력이 부족한건지 도무지 나오지 않았다.
그래서 잘 모르겠고 그냥 내 생각대로 냅다 코드 만들어서 실행 시켰더니
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let input = [];
rl.on('line', function (line) {
input = line.split(' ');
}).on('close', function () {
console.log(a=Number(input[0]) \n b=Number(input[1]));
});
굉장한 에러창을 선물받을 수 있었다.
뭔진 모르겠지만 저 특수문자(`)가 값과 문자를 함께 출력할 수 있게 해수는건가?라는 추측만 하고 있다.
입력받은 값을 출력하는 방법이라고 한다! 단순히 값 혼자만 출력할 떄가 아니라 다른 문자와 같이 출력할 때는 저렇게 안하면 굉장한 오류가 난다.
또한 여기서 Number은 명시적 타입변환을 위해 자바스크립트가 제공하는 전역변수다.
자세한건 여기 참고
console.log(Number(input[0]) + Number(input[1]));
그래서 Number이 없어도 숫자가 나오지만 Number을 사용함으로써 확실하고 명시적으로 숫자타입만 나온다는걸 보여주는 것.
3. 템플릿 리터럴과 백틱(`)문자
backtick(`)문자를 사용하여 문자열을 표현한 것을 자바스크립트에서 템플릿 리터럴이라 한다.
이렇게 하면 두가지 장점. 1) 줄바꿈이 쉽고, 2) 문자열 내부에 표현식 포함이 가능하다.
예를들어 일반 문자열
console.log("fifteen is " + (a + b) + " and/nnot " + (2 * a + b) + ".");
템플릿 리터럴
console.log(`Fifteen is ${a + b} and
not ${2 * a + b}.~); //\n줄바꿈 기호도 쓰지 않음.
여기서 아까 한참 헤멧던 $의 의문도 풀 수 있다.
백틱 문자와 세트였던 것.
이렇게 하면 보이는 장점으로는
(1) 줄바꿈 기호(\n)을 쓰지 않고 코드에서 그냥 줄을 바꾼것
(2) (a + b)라는 표현식을 쓰기 위해 따옴표를 닫고 + 기호로 연결했던 것을
문자열 안에 ${a + b}라는 표현으로 그대로 쓸수가 있게 된 것이다. ${2 * a * b }도 마찬가지.
(3) 또한 문장이 계속 끊겼던 것이 그대로 이어져 훨씬 보기가 편하다.
주의할 점으로는 백틱을 작은 따옴표로 착각하면 정말정말 멘붕이 올 수 있으니 조심하자..
참고 블로그
backtick(`)문자와 javascript 템플릿 리터럴
키보드에는 작은따옴표와 비슷한 문자가 하나 더 있다. ` 바로 이 문자이다. javascript에서는 템플릿 리터럴에 활용되고, 마크다운에서 코드를 강조(code, fenced code block)하는데 쓰이기도 하는 문자
flik.tistory.com
정답
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let input = [];
rl.on('line', function (line) {
input = line.split(' ');
}).on('close', function () {
console.log(`a = ${Number(input[0])}\nb = ${Number(input[1])}`);
});
이건 출제자의 의도대로 풀었던 거고 다른사람들의 풀이를 보니 뭔가 더 쉽게 할 수 있을 것 같아서 나도 해 봤따
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let input = [];
rl.on('line', function (line) {
input = line.split(' ');
}).on('close', function () {
console.log('a =',input[0]);
console.log('b =',input[1]);
});
템플릿 리터럴 몰라도 할 수 있어.ver
단순무식하지만 실행은 잘 된다!