[JavaSrcipt] Baekjoon - 1152 : 단어의 개수
문제
영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.
입력
첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열은 공백으로 시작하거나 끝날 수 있다.
출력
첫째 줄에 단어의 개수를 출력한다.
예제입력 | 예제출력 |
The Curious Case of Benjamin Button | 6 |
The first character is a blank | 6 |
The last character is a blank | 6 |
❌ 풀이 (틀림)
const input=require('fs').readFileSync('/dev/stdin').toString().split('');
let count =0;
for(let i=0;i<input.length;i++){
if(input[i]===' '&&input.length>1){
count++;
};
}
console.log(input.length==0 ? 0 : (input[0]===' '||input[input.length-1]===' ' ? count : count+1))
처음엔 쉬운줄알았다.
count를 세서 앞뒤가 공백이 아니라면 +1한값을 출력
앞뒤에 공백이 하나라도 있다면 count+1
input 입력값이 ''일경우에도 1이 출력되길래
input의 길이가 0이라면 0을 출력하게도 했다.
이후에 둘다 공백이라면 count-1 까지 해봤는데 전부 오답이었다.
✅ 다른분의 풀이
const input=require('fs').readFileSync('/dev/stdin').toString().trim().split(' ');
console.log(input[0]=='' ? 0 : input.length)
쉬운거 맞았나보다
난 나름 쉽게봤던것 같은데도
이분의 풀이를 보니 나혼자 복잡하게 본것같다..
입력값을 trim 메서드를 이용해 양끝의 공백을 제거해주고
''이 아닌 ' ' 띄어쓰기를 기준으로 잘랐다.
여기까지보면
The first character is a blank
이걸 입력받았을 때 앞의 공백이 제거되고
The first character is a blank 만 남는다.
여기서 공백(띄어쓰기)을 기준으로 나누어주면
input = ['The', 'first', 'character', 'is', 'a', 'blank']
배열이 만들어지고 그냥 이 배열의 길이를 출력하면 되는것이다.
만약 입력값이 아무것도 없을경우에는 0 을 출력하게 했다.
-출처
https://www.acmicpc.net/problem/1152