Algorithm

[백준 / NodeJS] 17413번 단어 뒤집기2

cob 2023. 4. 4. 22:08

 

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

 

17413번: 단어 뒤집기 2

문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져

www.acmicpc.net

 

 

 


1. 문제 설명

문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다.

먼저, 문자열 S는 아래와과 같은 규칙을 지킨다.

  1. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져 있다.
  2. 문자열의 시작과 끝은 공백이 아니다.
  3. '<'와 '>'가 문자열에 있는 경우 번갈아가면서 등장하며, '<'이 먼저 등장한다. 또, 두 문자의 개수는 같다.

태그는 '<'로 시작해서 '>'로 끝나는 길이가 3 이상인 부분 문자열이고, '<'와 '>' 사이에는 알파벳 소문자와 공백만 있다. 단어는 알파벳 소문자와 숫자로 이루어진 부분 문자열이고, 연속하는 두 단어는 공백 하나로 구분한다. 태그는 단어가 아니며, 태그와 단어 사이에는 공백이 없다.

 

 


2. 입출력

 

 

 


3. 문제 풀이

const [input] = require("fs")
  .readFileSync("./input.txt")
  .toString()
  .trim()
  .split(/\r\n/);

//const [input] = require("fs").readFileSync("/dev/stdin").toString().trim().split(/\n/);

function solution(input) {
  const answer = [];
  
  // 1) "<문자>"를 그룹화하여 패턴을 포함해 자른다.
  input = input.split(/(<[^>]*>)/);

  input.forEach((item) => {
    // 2) "<"로 시작하면 그대로 answer에 담는다.
    if (item[0] === "<") {
      answer.push(item);
    } else {
      // 3) 아닐 경우 띄어쓰기 기준으로 잘라 단어를 뒤집는다.
      item.split(/( )/).forEach((str) => {
        // 4) 뒤집은 단어를 문자열로 바꿔 answer에 담는다.
        answer.push(str.split("").reverse().join(""));
      });
    }
  });
  // answer를 문자열로 변환한다.
  console.log(answer.join(""));
}
solution(input);

 

 

 

 

반응형

'Algorithm' 카테고리의 다른 글

[백준 / NodeJS] 17298번 오큰수  (0) 2023.04.09
[백준 / NodeJS] 10799번 쇠막대기  (0) 2023.04.05
[백준 / NodeJS] 10866번 덱  (0) 2023.04.03
[백준 / NodeJS] 1158번 요세푸스  (0) 2023.04.02
[백준 / NodeJS] 10845번 큐  (0) 2023.03.31