반응형
문제
영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.
입력
첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 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의 개수(=단어의 개수)가 출력된다.
'ALGORITHM > 백준' 카테고리의 다른 글
[JAVA] 백준 2908 - 상수 (0) | 2024.03.23 |
---|---|
[JAVA] 백준 5622 - 다이얼 (1) | 2024.03.23 |
[JAVA] 백준 13223 - 소금 폭탄 (0) | 2024.03.07 |
[JAVA] 백준 1543 - 문서 검색 (0) | 2024.03.07 |
[JAVA] 백준 1157 - 단어 공부 (0) | 2024.03.06 |