ALGORITHM/백준
[JAVA] 백준 1152 - 단어의 개수
송경훈
2024. 3. 23. 11:28
반응형
문제
영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.
입력
첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열은 공백으로 시작하거나 끝날 수 있다.
출력
첫째 줄에 단어의 개수를 출력한다.
입출력 예제
알고리즘❓ 풀어내기❗️
단어의 개수를 세기가 어렵다면, 공백의 개수를 이용해 보자.
🧑🏻💻코드 리뷰 - (1)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
int count = 0;
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == ' ') {
count++;
}
}
if (str.charAt(0) != ' ' && str.charAt(str.length() - 1) != ' ') {
count += 1;
} else if (str.charAt(0) == ' ' && str.charAt(str.length() - 1) == ' ') {
count -= 1;
}
System.out.println(count);
}
}
▶ for 문 : str을 순회하면서 인덱스의 요소가 공백인 것을 찾아 count의 개수를 더한다.
▶ if ~ else if 문 : str의 첫 번째와 마지막 요소가 공백이 아니라면 count에 1을 더한다. 반대로 공백이라면 count에 1을 뺀다.
🧑🏻💻코드 리뷰 - (2)
import java.util.Scanner;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
StringTokenizer st = new StringTokenizer(str, " ");
System.out.println(st.countTokens());
}
}
StringTokenizer 클래스는 문자열을 우리가 지정한 구분자로 쪼개주는 클래스이다. 그렇게 쪼개어진 문자열을 토큰(token)이라고 부른다.
▶ StringTokenizer st = new StringTokenizer(str, " ") : str을 공백을 기준으로 분리해 준다.
▶ System.out.println(st.countTokens()) : int countTokens() 메서드는 남아있는 token의 개수를 반환한다. 전체 token의 개수가 아닌 현재 남아있는 token 개수이다. 그러므로 공백을 기준으로 분리하고 남은 token의 개수(=단어의 개수)가 출력된다.