BOJ 1152
2020-01-27
위 문제는 백준 사이트의 알고리즘 1152 문제에 관한 설명입니다.
문제
영어 대소문자와 띄어쓰기만으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오.
단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.
입력
첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다.
단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열의 앞과 뒤에는 공백이 있을 수도 있다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String S = sc.nextLine();
int check = 1;
for (int i = 0; i < S.length(); i++) {
if (S.charAt(i) == ' ')
check++;
}
if (S.charAt(0) == ' ')
check--;
if (S.charAt(S.length() - 1) == ' ')
check--;
System.out.println(check);
}
}
제가 푼 소스코드입니다.
’ ‘가 단어 하나를 구분시키고 공백이 연속시키는 경우는 없기 때문에
String으로 받아들인 S에 ‘ ‘가 몇개나 포함되어있는가 Count하고,
맨 앞의 공백, 맨뒤의 공백의 갯수를 제외시키면 된다 생각했습니다.
import java.util.StringTokenizer;
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
StringTokenizer st = new StringTokenizer(str, " ");
int count = st.countTokens();
System.out.println(count);
}
}
StringTokenizer를 활용하셔서 푸셨습니다.
StringTokenizer는 문자열을 토큰이라는 용어로 부르는데 사용방법은 메소드를 이용하여 전체 토큰의 수는 몇개 있는지,
사용할 토큰이 있는지를 판단하여 토큰을 읽어옵니다.