문제
영어 대소문자와 띄어쓰기만으로 이루어진 문장이 주어진다. 이 문장에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 단어는 띄어쓰기 하나로 구분된다고 생각한다.
입력
첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문장이 주어진다. 이 문장의 길이는 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 |
댓글