옥수수와 식빵 그리고 코딩

a와 b 출력하기(템플릿 리터럴) 본문

2023/프로그래머스

a와 b 출력하기(템플릿 리터럴)

옥식 2023. 10. 6. 18:05

이제 한문제 풀었으니 수월할 줄 알았으나! 크나큰 오산.

다시 열심히 검색을 돌렸따.

 

문제

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) 또한 문장이 계속 끊겼던 것이 그대로 이어져 훨씬 보기가 편하다.

 

주의할 점으로는 백틱을 작은 따옴표로 착각하면 정말정말 멘붕이 올 수 있으니 조심하자..

참고 블로그

https://flik.tistory.com/53

 

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

단순무식하지만 실행은 잘 된다!

Comments