알파벳 소문자로 이루어진 단어를 가지고 아래와 같은 과정을 해 보려고 한다.
먼저 단어에서 임의의 두 부분을 골라서 단어를 쪼갠다. 즉, 주어진 단어를 세 개의 더 작은 단어로 나누는 것이다. 각각은 적어도 길이가 1 이상인 단어여야 한다. 이제 이렇게 나눈 세 개의 작은 단어들을 앞뒤를 뒤집고, 이를 다시 원래의 순서대로 합친다.
예를 들어,
단어 : arrested
세 단어로 나누기 : ar / rest / ed
각각 뒤집기 : ra / tser / de
합치기 : ratserde
단어가 주어지면, 이렇게 만들 수 있는 단어 중에서 사전순으로 가장 앞서는 단어를 출력하는 프로그램을 작성하시오.
첫째 줄에 영어 소문자로 된 단어가 주어진다. 길이는 3 이상 50 이하이다.
첫째 줄에 구하고자 하는 단어를 출력하면 된다.
mobitel
bometil
firstLength : 첫 단어의 길이
secondLength : 두 번째 단어의 길이
last : 첫 단어를 제외한 단어
words : 만들어지는 단어 배열
var fs = require('fs');
let word = fs.readFileSync(0, 'utf-8').toString().trim();
let firstLength = 1;
let last = '';
let words = [];
while (true) {
if (firstLength === word.length - 1) break;
let first = word.slice(0, firstLength);
let secondLength = 1;
last = word.slice(firstLength);
while (true) {
if (secondLength === word.length - firstLength) break;
let second = last.slice(0, secondLength);
let third = last.slice(secondLength);
words.push(
first.split('').reverse().join('') + second.split('').reverse().join('') + third.split('').reverse().join('')
);
secondLength++;
}
firstLength++;
}
words.sort();
console.log(words[0]);
처음 문제를 보고 쉽겠다 생각했는데 막상 구현하려니.. 너무 복잡해지는 거 아닌가 싶었다. 하지만 결과적으로 세 단어밖에 없기 때문에 while문이 deep해지진 않겠구나 싶어서 일단 구현해봤는데 원트에 성공할 줄은 몰랐다.