영어 대소문자와 띄어쓰기만으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.
첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열의 앞과 뒤에는 공백이 있을 수도 있다.
첫째 줄에 단어의 개수를 출력한다.
The Curious Case of Benjamin Button
6
Mazatneunde Wae Teullyeoyo
3
Teullinika Teullyeotzi
2
let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString();
console.log(input.trim().split(' ').length);
let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString();
let wordsArr = input.trim().split(' ');
let countOfWords = 0;
for (let i = 0; i < wordsArr.length; i++) {
if (wordsArr[i] !== '') {
countOfWords++;
}
}
console.log(countOfWords);
첫 번째 소스 코드의 경우 공백만 입력되었을 때 0
이 나와야하는데 1
이 출력되어 틀린 경우다. (속상..ㅡㅠ)
공백을 입력하여 input.trim().split(' ')
을 출력해보면 ['']
이 출력된다.
이 때문에 1
이 출력되는 것이다.
따라서 입력된 값이 ''
인 경우를 제외하고 순수 단어만 갯수를 파악하여 출력하였다.
처음에는 배열을 이용하지 않고 입력된 값의 문자 각각을 파악하여 해결하고자 했으나,
입력 값의 길이가 길어질수록 반복 횟수가 많아지므로 효율적이지 않다고 생각되었다.
정답 비율이 낮은 것에 비해 쉽다고 생각했는데, 역시 이유는 있었다..ㅋㅋ