🔖 문제 설명
다음과 같이 출력하도록 코드를 작성해 주세요.
📋 출력 예시
!@#$%^&*(\'"<>?:;
🧾 기본 제공 코드
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on('close', function () {
});
🗳️ 최초 풀이 코드
rl.on('close', function () {
console.log('!@#$%^&*(\'"<>?:;');
});
너무 단순한 형태의 문제여서 어떤 의도가 있는걸까 하고
다소 의아했다.
일단 출력해보자는 생각으로 출력해보았다.
결과는 다음과 같았다.
🩻 출력 결과
실행 결과 〉 | 실행한 결괏값 !@#$%^&*('"<>?:;이 기댓값 !@#$%^&*(\'"<>?:;과 다릅니다. |
위와 같이 오류가 발생했고 틀린그림찾기를 방불케하는 혼잡한 특수문자들 사이로
백슬래시(\)가 누락되어 있는 것을 확인할 수 있었다.
궁금했다.
어떠한 이유 때문에 백슬래시가 누락된 건지 궁금했다.
그래서 찾아보았다.
구글링해서 찾아본 결과,
문자열 내 특수문자가 작성될 경우 특수문자 표기 방법 중
백슬래시(\)를 활용한 특수문자 표기 방법(= escape 문자)이 존재하는 것을 확인할 수 있었다.
이러한 이유 때문에 위에서 코드 출력 시
백슬래시(\)를 활용한 특수문자 표기 방법(= escape 문자)으로 인해 백슬래시(\)가 누락되어 출력된 것이었다.
또한 여기서 추가적으로 문자열 작성 시
javascript에서 문자열은 홑따옴표(') 또는 쌍따옴표(") 내에 작성된다.
하지만 문자열 내에 문자열을 표기하기 위해 사용된 기호와 동일한 기호가 작성되어 있는 경우
console.log("Hello, "World"") // error
위와 같이 에러가 발생한다.
이를 해결하기 위해서는
console.log("Hello, 'World'")
console.log('Hello, "World"')
위와 같이 문자열을 표현하기 위해 사용된 기호와 다른 기호를 사용하면 된다.
이처럼 출력하려는 문자열의 내용이 짧다면 혹여나 발생할 수 있는 에러에 즉각 대응이 가능하다.
하지만 세상이란 참 호락호락하지 않다.
예시처럼 짧게 툭하고 끝낼 수 있는 범위의 데이터라면 문제될게 없지만
이보다 더 방대한 양의 텍스트라면? 혹은
회사마다 특정 규칙이 존재하거나 또는 불특정하게 홑따옴표(')와 쌍따옴표(")가
혼용되어 표기되는 긴 글인 경우
문자가 길어질 수록 문제가 발생할 확률은 커지고 그만큼 신경써야 할 부분들도 많아진다.
때문에 보다 더 중요한 개발 기능 구현에 할애해야 할 시간이 중요도가 낮은 곳에 분산될 수도 있다.
효율적이지 못한 상황이 발생할 수 있다는 것이다.
이러한 경우를 극복하고 문자열과 특수기호를 보다 더 수월하게 표현하기 위해 만들어진 것이 있다.
템플릿 리터럴이다.
템플릿 리터럴은 ES6 문법이다.
( 이전 버전의 ES2015사양 명세에서는 "template strings" (템플릿 문자열) 라고 불려 왔다고 한다. )
홑따옴표(')나 쌍따옴표(")를 대신해 백틱(` `)을 사용하여 문자열을 표현한다.
백틱(`)내에 작성된 문자 또는 특수문자는 모두 입력된 형태 그대로 출력된다.
🗳️ 수정한 풀이 코드
rl.on('close', function () {
console.log(`!@#$%^&*(\\'"<>?:;`);
});
문자열 표현을 위해 기존 따옴표에서 백틱(`)을 사용했다.
\' escape 문자로 인해 사라지게 될 백슬래시를 보충하기 위해
escape 문자 앞에 백슬래시(\)를 하나 더 추가하여 해결하였다.
📖 더 이해하고 가기
escape 문자 사용하기
백슬래시(backslash) 기호로 텍스트 문자열에 추가 할 수 있는 다른 특수 문자들 목록이다 :
특수문자 | 출력 형태 및 설명 | 영문 표기 |
\' | ' | single quote |
\" | " | double quote |
\\ | \ | backslash |
\n | 커서를 다음 줄로 이동 | new line |
\r | 커서를 해당 줄 처음으로 이동 | carriage return |
\t | 커서를 탭 만큼 이동 | tab |
\b | 백스페이스(←)와 동일하게 작동 | backspace |
\f | 커서를 다음 페이지로 이동 (용지 넘김 문자) | form feed |
📎 참고
- https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Template_literals
- https://grownfresh.tistory.com/121
- http://jun.hansung.ac.kr/CWP/Javascript/JavaScript%20Strings.html
🔸 작성된 본문 내용 중 미흡한 부분이 있을 수 있습니다.
🔸 고칠 부분이나 추가되면 좋을 내용 댓글로 남겨주시면 완성도 높은 글을 만들어가는 데에 큰 힘이 됩니다. ☺️
'프로그래머스 > 코딩문제' 카테고리의 다른 글
[프로그래머스] Lv.0 조건 문자열 (0) | 2023.10.19 |
---|---|
[프로그래머스] Lv.0 홀짝에 따라 다른 값 반환하기 (0) | 2023.10.13 |
[프로그래머스] Lv.0 더 크게 합치기 (1) | 2023.10.11 |
[프로그래머스] Lv.0 문자열 섞기 (2) | 2023.10.10 |
[프로그래머스] Day1 할당량 완료하기 (0) | 2023.10.10 |