🌴 문제
문제
영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.
입력
첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열은 공백으로 시작하거나 끝날 수 있다.
출력
첫째 줄에 단어의 개수를 출력한다.
예제 입력 1 복사
The Curious Case of Benjamin Button
예제 출력 1 복사
6
예제 입력 2 복사
The first character is a blank
예제 출력 2 복사
6
예제 입력 3 복사
The last character is a blank
예제 출력 3 복사
6
🌴 문제 분석
package BAEKJOON;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class day25 {
public static void main(String[] args) throws IOException {
// 단어의 개수
// StringTokenizer
// java.util 패키지에 속해 있으며, 하나의 문자열을 여러 개의 문자열로 분리하기 위해 사용한다.
// 문자열을 분리하기 위해 사용되는 기준 문자를 구분 문자 라고 한다.
// 구분 문자로 분리된 문자열을 토큰이라고 한다.
//1.
// BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//
// StringTokenizer st = new StringTokenizer(br.readLine()," "); // StringTokenizer - 분리 기준을 공백으로 지정해주면 공백을 기준으로 나뉘어 토큰에 저장해주는 것이다
// System.out.print(st.countTokens()); // countTokens() - 분리한 토큰의 개수
//2.
int count = 0;
int pre_str = 32; // 공백을 의미한다. 아스키코드 // 이전 문자를 저장.
int str; // 현재 입력받은 문자 저장.
while(true) {
str = System.in.read();
// 입력받은 문자가 공백일 때,
if(str == 32) {
// 이전의 문자가 공백이 아니면
if(pre_str != 32)
count++;
}
// 입력받은 문자가 개명일때 ('\n')
else if(str == 10) {
// 이전의 문자가 공백이 아니면
if(pre_str != 32)
count++;
break;
}
pre_str = str;
}
System.out.println(count);
}
}
-----
The first character is a blank
6
'Algorithm' 카테고리의 다른 글
Algorithm - 다이얼 (Java) (0) | 2023.03.22 |
---|---|
Algorithm - 상수 (Java) (0) | 2023.03.21 |
Algorithm - 문자열 반복 (Java) (0) | 2023.03.19 |
Algorithm - 알파벳 찾기 (Java) (0) | 2023.03.18 |
Algorithm - 숫자의 합(Java) (0) | 2023.03.17 |