캐또's coding

9093 - 단어 뒤집기 - node.js 본문

기초 공부/백준 문제 풀이

9093 - 단어 뒤집기 - node.js

JS_K_coding 2023. 1. 22. 19:31

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

 

9093번: 단어 뒤집기

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는

www.acmicpc.net


지난 스택 문제에 이어 스택을 활용하는 두 번째 문제, 문장을 입력으로 받고 띄어쓰기를 기준으로 뒤바꾼다.

apple -> elppa

이를 해결하기 위해서 스택을 활용해보는 문제인데, stack에 순서대로 알파벳을 넣다가, ' '공백이나, 값이 없는 경우=문장이 끝난 경우undefined마다 스택에서 하나씩 빼는 것으로 스택을 활용하여 문제 해결이 가능하다.

 

const fs = require("fs");
let [n, ...input] = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
const result = [];
const stack = [];
// 입력값으로 문장 갯수 n과 배열input을 받아온다.
// 결과를 출력할 result와 계산에 활용할 stack을 할당해둔다.

for (i = 0; i < n; i++) {
// 아래에 대한 반복문: 문장 갯수만큼 반복한다는 의미

  let arr = input[i].trim().split("");
  // 입력으로 온 각 문장들을 알파벳 단위로 쪼개준다.
  
  for (j = 0; j <= arr.length; j++) {
  // 각 문장마다 반복문을 돈다.
  
    if (arr[j] === " " || arr[j] === undefined) {
    //만약 공백이나 undefined가 온 경우
    
      while (stack.length > 0) {
        result.push(stack.pop());
      }
      //stack의 길이가 0이 될때까지 stack.pop()을 해서 result에 push한다
      
      result.push(" ");
      //반복을 마치고 난 뒤 공백을 넣어준다
      
    } else {
      stack.push(arr[j]);
      //그 외의 경우에는 stack에 알파벳을 하나씩 넣어준다.
    }
  }
  result.push("\n");
  //문장을 도는 반복이 끝나면 줄넘김을 넣고 다음 문장에 대비한다.
}
console.log(result.join(""));
//result에 들어간 값들을 붙여서 출력하면 문제 해결

 

'기초 공부 > 백준 문제 풀이' 카테고리의 다른 글

1874 - 스택 수열 - node.js  (0) 2023.01.24
9012 - 괄호 - node.js  (0) 2023.01.23
10828 - 스택 - node.js  (0) 2023.01.21
24060 - 알고리즘 수업 - node.js  (0) 2023.01.20
25501 - 재귀의 귀재 - node.js  (0) 2023.01.19
Comments