본문 바로가기
공부/알고리즘

백준1152_단어의 개수

by 미네밍 2017. 1. 11.

문제

영어 대소문자와 띄어쓰기만으로 이루어진 문장이 주어진다. 이 문장에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 단어는 띄어쓰기 하나로 구분된다고 생각한다.

입력

첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문장이 주어진다. 이 문장의 길이는 1,000,000을 넘지 않는다.

출력

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

예제 입력 

The Curious Case of Benjamin Button

예제 출력 

6


[코드]


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        int count = 0;
        while(sc.hasNext()){
            sc.next();
            count++;
        }
        
        System.out.println(count);
    }
 
}
 
 
cs


[알고리즘]


스캐너에서 다음 단어가 있는지 검사하고, 받은 단어 갯수만큼 count 수를 올려줬다.

맨 처음 Eclipse 에서 실행할 때는, 입력이 끝났음을 나타내는 방법을 몰라서 계속 while문이 끝나지 않았다. 

인터넷 찾아보다가 알게 된건데,  EOF을 나타내는 unix 의 명령어는 Ctrl+D였다. (window는 Ctrl+Z라고 한다)

이클립스에서도 그렇게 하니까 while문을 잘 빠져나왔다. 


그리고, 파일 입출력으로 실행해줘도 정답으로 잘 나왔다.


이 방법 말고도 StringTokenizer 로 sc.nextLine() 으로 받아준 코드도 있었는데, 



1
2
StringTokenizer str = new StringTokenizer((new Scanner(System.in)).nextLine());
System.out.print(str.countTokens());
cs


이런 식이였다. 생각지 못하고 있었는데, 이 방법으로 해도 좋을 것 같다. 그리고 StringTokenizer의 기본 token은 '공백' 이다.

문제의 조건이 '공백' 으로 단어를 나눈다고 했기 때문에, 이 위의 코드에서 따로 공백을 넣어주지 않아도 자동으로 토큰이 나뉘어져 단어의 개수가 올바르게 출력된다.


'공부 > 알고리즘' 카테고리의 다른 글

백준1260_DFS와 BFS  (0) 2017.03.09
백준9095_1,2,3 더하기  (2) 2017.01.16
백준1916_최소비용 구하기  (2) 2017.01.09
백준1475_방번호  (0) 2017.01.04
백준1753_최단경로  (0) 2017.01.02

댓글