본문 바로가기
알고리즘 스터디/백준 알고리즘 기초 1

[백준 11656번 접미사 배열 - node.js] [알고리즘 기초 1/2]

by 레일라오리덕 2021. 7. 30.
728x90

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

 

11656번: 접미사 배열

첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000보다 작거나 같다.

www.acmicpc.net

 

문제

 

접미사 배열은 문자열 S의 모든 접미사를 사전순으로 정렬해 놓은 배열이다.

baekjoon의 접미사는 baekjoon, aekjoon, ekjoon, kjoon, joon, oon, on, n 으로 총 8가지가 있고, 이를 사전순으로 정렬하면, aekjoon, baekjoon, ekjoon, joon, kjoon, n, on, oon이 된다.

문자열 S가 주어졌을 때, 모든 접미사를 사전순으로 정렬한 다음 출력하는 프로그램을 작성하시오.

 

입력

 

첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000보다 작거나 같다.

 

출력

 

첫째 줄부터 S의 접미사를 사전순으로 한 줄에 하나씩 출력한다.

 

예제 입출력

 

입력 출력
aekjoon baekjoon ekjoon joon kjoon n on oon aekjoon baekjoon ekjoon joon kjoon n on oon

 

풀이[node.js]

 

 

728x90

이번 문제 또한 간단한 문제였지만, join할 때마다 trim을 붙여주지 않아 출력형식이 잘못되었다는 오류가 나왔다.

c++이 아닌 node.js로는 이런 문제가 계속 나온다.. :(

아무튼, 문제 자체는 간단하다.

input값을 stack에 넣어준 후, stack에서 pop()으로 값을 꺼내서, 해당 값을 tmp 앞에 차근차근 넣어준다.

그 후에, tmp값을 join으로 붙여서 answer에 넣어준다.

answer를 sort함수를 사용하여 사전식으로 정렬한 후, 개행문자 기준으로 join해서 출력해주면 된다.

var fs = require('fs');
var input = fs.readFileSync('/dev/stdin').toString().split('');
var stack = [...input];
var answer = [];
var tmp = [];
for(var i=0; i<input.length; i++){
    tmp.unshift(stack.pop());
    answer.push(tmp.join('').trim());
}
console.log(answer.sort().join('\n').trim());
728x90

댓글