[백준: 9093번] 단어 뒤집기 문제 | 자바스크립트(Javascript(JS), Node)

남양주개발자

·

2021. 10. 26. 08:30

728x90
반응형

[백준: 9093번] 단어 뒤집기 문제 자바스크립트(Javascript(JS), Node)

✍️ 문제

 

9093번: 단어 뒤집기

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

www.acmicpc.net

문장이 주어졌을 때, 단어를 모두 뒤집어서 출력하는 프로그램을 작성하시오. 단, 단어의 순서는 바꿀 수 없다. 단어는 영어 알파벳으로만 이루어져 있다.

입력

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

출력

각 테스트 케이스에 대해서, 입력으로 주어진 문장의 단어를 모두 뒤집어 출력한다.

// 예제 입력
2
I am happy today
We want to win the first prize

// 예제 출력
I ma yppah yadot
eW tnaw ot niw eht tsrif ezirp

Solution (코드 예시)

예시1

예시1은 문자열의 길이만큼 순회하면서 자바스크립트 split, reverse, join 메서드를 적절하게 활용해서 구현했습니다. 우선 문장을 띄어쓰기('  ') 기준으로 잘라서(split) 배열을 만듭니다. 만들어진 배열을 기준으로 순회하며 문자열(t[j])을 문자로 자르고, 뒤집고(reverse), 다시 결합(join)합니다. 해당 배열 인덱스의 값을 변환된 값으로 재할당합니다.

  • ex) solution -> [s, o, l, u, t, i, o, n] -> [n, o, i, t, u, l, o, s] -> noitulos
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
const caseCount = Number(input[0]);

for (let i = 1; i <= caseCount; i++) {
  const t = input[i].split(' ');

  for (let j = 0; j < t.length; j++) {
    t[j] = t[j].split('').reverse().join('');
  }

  console.log(t.join(' '));
}

메모리 16264KB, 시간 824 ms

예시2

스택(Stack) 특징을 활용해서 해결한 예시입니다. 문자열의 길이만큼 순회하면서 띄어쓰기(" ")거나 끝지점(undefined)에 도달했을 경우, 스택에 저장한 모든 값을 꺼내서(pop) 역순으로 문자를 만들어 줍니다.

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

for (let i = 1; i <= caseCount; i++) {
  const s = input[i];
  let str = '';
  const stack = [];

  for (j = 0; j <= s.length; j++) {  
    if (s[j] === ' ' || s[j] === undefined) {
      while(stack.length > 0) {
        str += stack.pop();
      }
      str += " ";            
    } else {
      stack.push(s[j])
    }
  }

  console.log(str);
}

메모리 16604KB, 시간 756ms

스택(Stack)으로 구현한 케이스의 시간복잡도가 좀 더 퍼포먼스 좋게 나왔지만, 제한이 빡빡하지 않고 굳이 생각나지 않는다면 예시1과 같은 방법으로 간단하게 해결할 수 있습니다. 

728x90
반응형
그리드형

💖 저자에게 암호화폐로 후원하기 💖

아이콘을 클릭하면 지갑 주소가자동으로 복사됩니다