kokoball의 devlog
article thumbnail
728x90



문제

https://www.acmicpc.net/problem/17413

 

문제 해석

이 문제는 아래 첫 풀이처럼 문제의 모든 조건을 하나씩 구현한 다음 해결해도 되지만, 정규식으로 쉽게 해결할 수도 있다.

 

(정규식을 배우자..)

 

풀이

const filePath = process.platform === "linux" ? "dev/stdin" : "../test.txt";
const input = require("fs").readFileSync(filePath).toString().trim().split("\n");

function solution(input) {
  const arr = input[0].split("");
  let tempArr = "";
  let answer = "";

  for (let i = 0; i < arr.length; i++) {
    if (arr[i] === "<") {
      answer += tempArr.split("").reverse().join("");
      tempArr = "";

      let t = "<";
      let tempIndex = i + 1;
      while (1) {
        if (arr[tempIndex] !== ">") {
          t += arr[tempIndex];
          tempIndex++;
        } else break;
      }
      answer += t + ">";
      i = tempIndex;
      continue;
    }
    if (arr[i] !== "<" && arr[i] !== ">" && arr[i] !== " ") {
      tempArr += arr[i];
    } else if (arr[i] === " ") {
      answer += tempArr.split("").reverse().join("") + " ";
      tempArr = "";
    }
  }
  if (tempArr.length > 0) answer += tempArr.split("").reverse().join("");

  return answer;
}

console.log(solution(input));

 

 

정규식 풀이

const readline = require("readline");

const solution = (line) => {
  let answer = line;
  const regExp = /<[a-z\s]+>|[a-z0-9]+/g;

  answer = answer.replace(regExp, (word) => {
    return word.startsWith("<") ? word : word.split("").reverse().join("");
  });

  return answer;
};

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

rl.on("line", (line) => {
  console.log(solution(line));
});

 

 

728x90

'WEB > 백준 문제 풀이' 카테고리의 다른 글

백준 31863 내진설계 (node.js)  (0) 2024.06.06
백준 12904번 A와 B (node.js)  (0) 2024.05.30
백준 14502번 연구소 (node.js)  (0) 2024.05.23
백준 3190번 뱀 (node.js)  (0) 2024.05.22
백준 11536번 줄 세우기 (node.js)  (0) 2024.05.21
profile

kokoball의 devlog

@kokoball-dev

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!