본문 바로가기

알고리즘/백준알고리즘

[백준알고리즘-JAVA]1152번 풀이(단어의 개수)

안녕하세요

인포돈 입니다.



백준 알고리즘 1152번 풀이입니다. 


* 참고사항
 - 개발환경은 eclipse을 기준으로 작성되었습니다.
 - java언어를 이용하여 문제를 풀이합니다.
 - 알고리즘 문제는 풀이를 보고 해답을 찾는 것도 중요하지만 무엇보다 스스로 풀이를 시도해봐야 합니다!!
(해당 풀이를 보기 전 충분히 문제에 대해 고민해봐야 합니다!)
 - 해당 풀이 말고도 수많은 풀이 방법이 존재합니다.


백준 1152 (단어의 개수)

 

문제

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

입력

첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열의 앞과 뒤에는 공백이 있을 수도 있다.

출력

첫째 줄에 단어의 개수를 출력한다.

입력 예시

The Curious Case of Benjamin Button

출력 예시

6

입력 예시

 Mazatneunde Wae Teullyeoyo

출력 예시

3

입력 예시

Teullinika Teullyeotzi 

출력 예시

2

성공코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	public static void main(String args[]) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String str = br.readLine();
		
		StringTokenizer st = new StringTokenizer(str);
		int cnt = 0;
		
		while(st.hasMoreTokens()) {
			st.nextToken();
			cnt++;
		}
		System.out.println(cnt);
		}
		}

 

해당 알고리즘 문제는 정답 확률이 굉장히 낮았습니다. 무려 30% 밖에 되지 않았습니다.

 

정확한 이유는 모르겠지만, 저는 굉장히 쉽게 풀어가지고 의아하긴 했습니다.

 

해당 알고리즘을 풀기 위해서 제가 생각해낸 흐름도는 다음과 같습니다.

입력받은 문자열을 " "(공백)으로 구분한다. -> 구분한 문자열을 반복문을 돈다. -> 반복문을 돌면서 count를 한다. -> 출력한다.

 

굉장히 간단하죠??


 

코드에도 굉장히 어려운 코드는 1개도 없습니다. 해당 알고리즘에서 그래도 알아야 할 점은 2가지입니다.

 

StringTokenizer, count

 

StringTokenizer

문자열을 구분하는 가장 대표적인 객체로 next, hasMoreTokens와 같은 메서드가 있다.

일반적으로 Default값은 " "(공백)으로 구분하여 문자열을 분리해서 Token에 저장합니다!!

 

count

해당 문자열을 반복문을 돌리면서 개수를 세는 변수를 따로 선언해 줘서 count를 하는 방법입니다. 이거는 사실 대표적으로 사용되는 변수 활용이라고 생각하시면 됩니다.