입력 중 int& 부분은 변수 선언문이다
그 다음에 오는 잡다한 특수문자 및 알파벳은 뒤집어져서 나열된다
변수 선언과 특수문자는 붙어있고 알파벳은 한번 띄워준 후 세미콜론으로 마무리한다
첫인상은 그냥 문자열 구현문제 ? 정도로 느껴졌고 팀원 분께서 한번 설명해 준 기억이 있었지만 내 식대로 해석해서 풀려고 노력했다
const fs = require("fs");
//const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
const input = fs
.readFileSync("example.txt", "utf8")
.toString()
.trim()
.split("\n");
const datas = input.join("").replaceAll(",", "").replaceAll(";", "").split(" ");
const result = [];
const vari = datas.shift();
const reg = /[a-zA-Z]/;
const divide = (data) => {
let alph = [];
let schar = [];
for (const el of data) {
if (reg.test(el)) {
alph.push(el);
} else if (el === "[") {
schar.push("]");
} else if (el === "]") {
schar.push("[");
} else if (!reg.test(el)) {
schar.push(el);
}
}
return `${vari}${schar.reverse().join("")} ${alph.join("")};`;
};
for (let i = 0; i < datas.length; i++) {
let str = divide(datas[i]);
result.push(str);
}
console.log(result.join("\n"));
첫번째로 데이터 가공 부분에서 join을 이용하여 배열을 문자열로 변환 후 replaceAll 문자열 메서드를 이용하여 모든 쉼표와 세미콜론을 없애주었다.
그 후에 다시 문자열 메서드인 split을 이용하여 각각의 요소들을 배열로 나눠주었고 그 중에 첫번째 요소인 int&를 vari라는 변수에 전달하며 datas 배열에서는 삭제해주었다.
reg라는 변수 안에는 알파벳을 구별해주는 정규식을 선언해주었고 변수 선언 시 특수문자와 알파벳을 구별해 주는 역할을 해줄것이다.
divide라는 함수를 반복문 내부에서 호출하여 datas 배열의 모든 인덱스를 탐색하여 알파벳과 특수문자를 나누어준 후 예제 출력과 같은 모양으로 출력해주었다.
끝!
정말 좋은 정보 감사합니다!