[boj] 17413. 단어 뒤집기 2 (node.js)
while (true) {
if (L >= R) break;
if (str[L] == "<") {
while (true) {
result += str[L];
if (str[L] == ">") break;
L++;
}
} else if (str[L] == " ") {
result += " ";
} else {
let temp = "";
while (true) {
if (str[L] == "<" || str[L] == " " || L >= R) break;
temp += str[L];
L++;
}
result += temp.split("").reverse().join("");
continue;
}
L++;
}
input.split(reg)
을 map((word) =>
해서, reg.test(word)
? 만족하면 태그이므로 그대로 태그에 감싸진 문자열 반환 : 만족하지 않으면 태그가 아니므로 문자열을 뒤집에서 반환) 한다.split(" ")
한 결과물을 가지고 정규식을 사용해 태그 문자열을 거르는 함수를 정의해 풀이했었다. 이 방법은 태그 내의 " "까지도 무조건 split 해버려서, 함수 적용 단위부터 잘못된 경우다. 고민하다 첫 번째 방법을 구현했는데, 예외 처리 때문에 30분 넘게 쓴 것 같다. 처음 처리방법인 정규식을 통해 split 할 수 있다는 걸 다른 풀이를 보고 배웠다. 문자열 처리의 최고봉은 역시 정규표현식을 마스터하는 게 열쇠일 듯!const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
const solution = () => {
const str = input();
let result = "";
let L = 0;
let R = str.length;
while (true) {
if (L >= R) break;
if (str[L] == "<") {
while (true) {
result += str[L];
if (str[L] == ">") break;
L++;
}
} else if (str[L] == " ") {
result += " ";
} else {
let temp = "";
while (true) {
if (str[L] == "<" || str[L] == " " || L >= R) break;
temp += str[L];
L++;
}
result += temp.split("").reverse().join("");
continue;
}
L++;
}
console.log(result);
};
let _line = 0;
const input = () => stdin[_line++];
let stdin = [];
rl.on("line", function (line) {
stdin.push(line);
}).on("close", function () {
solution();
process.exit();
});