const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().trim().split(/\r\n|\r|\n/);
let N = Number(input.shift());
let set = new Set(input);
let arr = [...set];
let numArr = [];
let matchArr = new Array(N);
matchArr.fill('');
// for(let i=0; i < arr.length; i++) {
// let num = arr[i].trim().split('');
// numArr.push(num.length);
// }
// let maxWordNum = Math.max.apply(null, numArr);
// let minWorNum = Math.min.apply(null, numArr);
for(let i=0; i < arr.length; i++) {
matchArr[arr[i].trim().split('').length-1] += arr[i] + ' ';
}
matchArr = matchArr.filter(function(item) {
return item !== '';
})
let answer = '';
let wordsArr = [];
for(let i=0; i < matchArr.length; i++) {
let word = matchArr[i].split(' ');
// word = word.filter(function(item) {return item !== '';})
// console.log(word);
word.pop();
if(word.length > 1) {
wordsArr.push(word.sort());
} else {
wordsArr.push(word);
}
// console.log(word);
}
// console.log(wordsArr);
wordsArr.forEach(element => {
for(let i=0; i < element.length; i++) {
answer += element[i] + '\n';
}
});
console.log(answer);
왜 안되는건지 모르겠다. 다른 영단어로 많이 바꿔도 다 잘나왔는데 왜?
와 드디어 알았다. 역시 나빼고 다 천재. 질문 게시판에 올리기 잘했다.
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().trim().split(/\r\n|\r|\n/);
let N = Number(input.shift());
let set = new Set(input);
let arr = [...set];
let numArr = [];
let matchArr = new Array(50);
matchArr.fill('');
for(let i=0; i < arr.length; i++) {
matchArr[arr[i].trim().split('').length-1] += arr[i] + ' ';
}
matchArr = matchArr.filter(function(item) {
return item !== '';
})
let answer = '';
let wordsArr = [];
for(let i=0; i < matchArr.length; i++) {
let word = matchArr[i].split(' ');
word.pop();
if(word.length > 1) {
wordsArr.push(word.sort());
} else {
wordsArr.push(word);
}
}
wordsArr.forEach(element => {
for(let i=0; i < element.length; i++) {
answer += element[i] + '\n';
}
});
console.log(answer);
matchArr = new Array(N)
매치시킬 배열의 길이를 단어의 개수N만큼으로 생성한 여기가 잘못된 부분이였다. 왜냐하면 밑에 주어진 for문에서 arr배열의 요소 즉, 단어의 길이에 해당하는 수-1의 인덱스에 그 요소(단어)를 넣는 것을 수행한다. 하지만 mathArr를 단어들의 개수만큼 지정했고 arr배열의 요소인 단어의 길이는 그 개수보다 길다면? 당연히 범위가 벗어나 오류가 발생하는 것!
예를 들어 단어의 길이는 50까지 가능하니 13개의 단어들 중 한 단어의 길이가 50이라치면 matchArr는 길이가 13이 되는데 인덱스가 50인곳에 그 단어를 저장하게 되는 꼴. 이게 vscode에서는
[
'i ',
'no it ',
'but ',
'wont more wait ',
'yours ',
'cannot ',
'',
'hesitate ',
'',
'',
'',
'',
'',
<16 empty items>,
'undefinedasdfghjklzxcvbnmqwertyuiopasdf '
]
이렇게 할당이 되긴하는데 백준에서는 안되는 가보다. 그래서 애초에 가장 긴 단어의 길이인 50으로 mathArr의 길이를 지정하는 것이 맞다.
무조건 할당하는 걸 input의 첫줄에 있는 것이겠거니~ 짐작해서 기계적으로 하지말고 돌아가는 것을 좀 더 생각해보고 결정하자. 문제에 주어진 제한도 주의해서 보도록 하자.