프로그래머스/코딩문제

[프로그래머스] Lv.0 특수문자 출력하기

쟌문 2023. 10. 9. 22:58
반응형

문제 바로가기

🔖 문제 설명 

다음과 같이 출력하도록 코드를 작성해 주세요.

 


📋 출력 예시

!@#$%^&*(\'"<>?:;

 


🧾 기본 제공 코드

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

 


🔸 작성된 본문 내용 중 미흡한 부분이 있을 수 있습니다.
🔸 고칠 부분이나 추가되면 좋을 내용 댓글로 남겨주시면 완성도 높은 글을 만들어가는 데에 큰 힘이 됩니다. ☺️


반응형