✍️ 문제
문장이 주어졌을 때, 단어를 모두 뒤집어서 출력하는 프로그램을 작성하시오. 단, 단어의 순서는 바꿀 수 없다. 단어는 영어 알파벳으로만 이루어져 있다.
입력
첫째 줄에 테스트 케이스의 개수 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(' '));
}
예시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);
}
스택(Stack)으로 구현한 케이스의 시간복잡도가 좀 더 퍼포먼스 좋게 나왔지만, 제한이 빡빡하지 않고 굳이 생각나지 않는다면 예시1과 같은 방법으로 간단하게 해결할 수 있습니다.
'Computer science > 알고리즘' 카테고리의 다른 글
[백준, node.js] 1463번 "1로 만들기" 문제 해결방법 (0) | 2022.01.15 |
---|---|
[백준, node.js] 10818번 최소, 최대 문제 해결방법 (0) | 2022.01.12 |
[백준: 9012번] 괄호 문자열(Parenthesis String, PS) 문제 | 자바스크립트(Javascript(JS), Node) (0) | 2021.10.25 |
자바스크립트로 피보나치 수열 구현 (fibonacci in javascript) (0) | 2020.06.25 |
자바스크립트로 소수 구하는 알고리즘 구현(prime number in javascript) (1) | 2020.02.11 |
이 포스팅은 쿠팡파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.