문제
모든 알고리즘을 해독할 수 있는 알고리즘 7 원석를 보유한 알고리즘 제왕 파이와 썬은 죽기 전, 이 보물에 '암호'를 걸어 세계 어딘가에 묻어놨다고 공표하였다. 그가 남긴 문자는 아래와 같다.
섬으로 향하라!
' + -- + - + - '
' + --- + - + '
' + -- + - + - '
' + - + - + - + '
해(**1**)와 달(**0**), Code의 세상 안으로!(**En-Coding**)
**출력조건 : 문자열**
개념
- En-Coding : 코드화,암호화, 부호화를 의미한다. 사람이 인지할 수 있는 형태의 데이터를 약속된 규칙에 의해 컴퓨터가 사용하는 0과 1로 변환하는 과정을 통틀어 일컫는다.
- 아스키코드 ASCII(American Standard Code for Information Interchange) : 아스키 코드는 미국 ANSI에서 표준화한 정보교환용 7비트 부호체계이다. 000(0x00)부터 127(0x7F)까지 총 128개의 부호가 사용된다. 이는 영문 키보드로 입력할 수 있는 모든 기호들이 할당되어 있는 부호 체계이며, 매우 단순하고 간단하기 때문에 어느 시스템에서도 적용가능하다는 장점이 있으나, 2바이트 이상의 코드를 표현할 수 없기 때문에 국제표준의 위상은 유니코드에게 넘어갔다.
- 유니코드 : 전 세계의 모든 문자를 다루도록 설계된 표준 문자 전산 처리 방식. 이것을 규율하는 단체는 유니코드 콘소시엄(Unicode Consortium)이다. 주요 구성 요소는 ISO/IEC 10646 Universal Character Set과 UCS, UTF 등의 인코딩 방식, 문자 처리 알고리즘 등이다. 전 세계의 모든 문자를 담는 ISO/IEC 10646 코드표를 사용함으로써, 각 언어와 문자 체계에 따른 충돌 문제를 해결하였다.
문법
for in : 상속된 열거 가능한 속성들을 포함하여 객체에서 문자열로 키가 지정된 모든 열거 가능한 속성에 대해 반복합니다. (Symbol로 키가 지정된 속성은 무시합니다.)
for of : 반복가능한 객체(Array,Map,Set,String,TypedArray,arguments객체 등을 포함)에 대해서 반복하고 각 개별 속성값에 대해 실행되는 문이 있는 사용자 정의 반복 후크를 호출하는 루프를 생성합니다.
Number() : Number 객체는 숫자 값으로 작업할 수 있게 해주는 래퍼wrapper객체입니다.
new Number(value);
var a = new Number('123'); // a === 123은 false
var b = Number('123'); // b === 123은 true
a instanceof Number; // true
b instanceof Number; // false
typeof : 피연산자의 평가 전 자료형을 나타내는 문자열을 반환합니다.
instanceof : 생성자의 prototype 속성이 객체의 프로토타입 체인 어딘가 존재하는지 판별합니다.
instanceof instanceof
String.fromCharCode() : 메서드는 UTF-16 코드 유닛의 시퀀스로부터 문자열을 생성해 반환합니다. 이 메서드는 String 객체가 아닌 문자열을 반환합니다.
parseInt() : 이 함수는 첫 번째 인자를 문자열로 변환하고 파싱하고, 그 문자열을 파싱하여 정수나NaN을 리턴합니다.
parseInt(string, radix);
parseInt(string, radix);
string :분석할 값. 만약 string이 문자열이 아니면 문자열로 변환(ToString 추상 연산을 사용)합니다. 문자열의 선행 공백은 무시합니다.
radix : Optionalstring이 표현하는 정수를 나타내는 2와 36 사이의 진수(수의 진법 체계에 기준이 되는 값). 주의하세요-기본값이 10이 아닙니다!
replace() : 메서드는 어떤 패턴에 일치하는 일부 또는 모든 부분이 교체된 새로운 문자열을 반환합니다. 그 패턴은 문자열이나 정규식(RegExp)이 될 수 있으며, 교체 문자열은 문자열이나 모든 매치에 대해서 호출된 함수일 수 있습니다.
const p = 'The quick brown fox jumps over the lazy dog. If the dog reacted, was it really lazy?';
const regex = /dog/gi;
console.log(p.replace(regex, 'ferret'));
// expected output: "The quick brown fox jumps over the lazy ferret. If the ferret reacted, was it really lazy?"
정규표현식
/ /g === ''
/\+/g === '+'
/-/g === '-'
문제풀이
let data = [' + -- + - + - ', ' + --- + - + ',' + -- + - + - ', ' + - + - + - + '];
let result = '';
for (var str of data) {
// 모든 공백을 없애고, +는 1로, -는 0으로 대체한다.
console.log(str.replace(/ /g, '').replace(/\+/g, '1').replace(/\-/g, '0'));
// parseInt로 문자열로 바꾼다음 이진법 숫자였다는 것을 알려주면 정수로 반환해 준다.
console.log(parseInt(str.replace(/ /g, '').replace(/\+/g, '1').replace(/\-/g, '0'), 2));
// 숫자를 문자로 변환해 주느 메서드 fromCharCode를 이용해 변환한다.
console.log(String.fromCharCode(parseInt(str.replace(/ /g, '').replace(/\+/g, '1').replace(/\-/g, '0'), 2)));
// 누적해 준다.
result += String.fromCharCode(parseInt(str.replace(/ /g, '').replace(/\+/g, '1').replace(/\-/g, '0'), 2));
}
console.log(result);
'② 심화 > 알고리즘' 카테고리의 다른 글
알고리즘 필수 개념과 메서드 (프로그래머스 레벨 1) (0) | 2021.03.14 |
---|---|
프론트엔드 개발자 테스트 과제형 주요 포인트 (0) | 2021.03.06 |
[페이지교체알고리즘] 자리를 양보해가며! (0) | 2020.10.11 |
[시간연산] 섬으로 가라! (0) | 2020.10.09 |
JAVA독과 함께! (0) | 2020.10.08 |