Algorithm/Baekjoon(Node.js)

[JavaSrcipt] Baekjoon - 1152 : 단어의 개수

비망노트 2021. 9. 14. 22:55

문제

영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.

입력

첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 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