https://www.acmicpc.net/problem/9093
문제
문장이 주어졌을 때, 단어를 모두 뒤집어서 출력하는 프로그램을 작성하시오. 단, 단어의 순서는 바꿀 수 없다. 단어는 영어 알파벳으로만 이루어져 있다.
입력
첫째 줄에 테스트 케이스의 개수 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 |
풀이[node.js]
input[0]은 입력되는 문자열의 길이이므로, 이 길이인 cases만큼 배열을 돌면서, 각 요소를 공백을 기준으로 나누어주어 splited에 대입해주었습니다.
이 splited를 각각 돌면서, splited를 각 단어별로 split해주고, 그 배열을 reverse해 준 후에, 다시 문자열들을 합쳐서 answer에 넣어주고, 이 answer값을 출력해주었습니다.
var fs = require('fs');
var input = fs.readFileSync('/dev/stdin').toString().split('\n');
var cases = input[0];
var answer = '';
for(var i=1; i<= cases; i++){
var splited = input[i].split(' ');
for(var j in splited){
answer = answer + splited[j].split('').reverse().join('')+' ';
}
answer += '\n';
}
console.log(answer);
위의 방식은 간단하게 해결한 방식이고, stack을 사용하진 않았습니다.
아래는 각 splited된 값을 체크하여 splited[j]가 공백이 아닌 경우에는 stack에 해당 값을 push해주었습니다.
그리고, splited[j]가 공백인 경우, stack에 모인 값들을 뒤집어서 join으로 합쳐주고 answer에 값을 대입해주었습니다.
여기서, splited를 원래 배열보다 1번 더 돌도록 splited.length까지 j를 돌렸는데, 그 이유는 I am happy today에서 I, am, happy는 단어의 마지막에 공백이 존재해서 공백을 만나면 stack에 있는 값을 제거해줄 수 있습니다.
하지만, today 다음에는 공백이 없기 때문에, stack에 있는 today를 뒤집어서 answer에 넣어줄 방법이 없습니다.
그렇기에, 자바스크립트의 특성을 활용하여, 배열보다 한 길이 더 돌면서 undefined값이 나오게 된다면 stack의 값을 뒤집어서 answer에 대입할 수 있게 하였고, 만약 splited[j]가 공백이었다면, 삼항 연산자를 활용하여 공백을 answer에 추가적으로 대입해주었고, 아니라면(undefined)라면 아무것도 추가하지 않도록 해주었습니다.
그리고, 하나의 splited를 돌고 나오면 개행문자를 넣어주었습니다.
var fs = require('fs');
var input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
var cases = input[0];
var stack = [];
var answer = '';
for(var i=1; i<=cases; i++){
var splited = input[i].split('');
for(var j=0; j<=splited.length; j++){
if(splited[j] === ' '||splited[j] === undefined){
answer += stack.reverse().join('').trim() + (splited[j] === ' ' ? ' ' : '');
stack = [];
}else{
stack.push(splited[j]);
}
}
answer += '\n';
}
console.log(answer);
'알고리즘 스터디 > 백준 알고리즘 기초 1' 카테고리의 다른 글
[백준 10866번 덱 - node.js] [알고리즘 기초 1/2] (0) | 2021.07.28 |
---|---|
[백준 9012번 요세푸스 문제 - node.js] [알고리즘 기초 1/2] (0) | 2021.07.28 |
[백준 10845번 큐 - node.js] [알고리즘 기초 1/2] (0) | 2021.07.28 |
[백준 9012번 괄호 - node.js] [알고리즘 기초 1/2] (0) | 2021.07.28 |
[백준 10828번 스택 - node.js] [알고리즘 기초 1/2] (0) | 2021.07.28 |
댓글