티스토리 뷰

Q.1152 단어의 개수

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

 

입력 :

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

 

출력 :

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

 

<소스 코드>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.util.*;
 
public class Prac {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int answer = 0;
        int cntOfWord = 0;
        String sentence = sc.nextLine();
        sentence += ' ';                         //아래 if문의 조건식을 만족시키기 위해 문자열 마지막에 공백을 하나 더 추가한다.
        
        for(int i = 0; i < sentence.length(); i++) {
            if(sentence.charAt(i) == ' ') { //현재 문자가 공백일 경우
                if(cntOfWord != 0)              //공백 전의 문자가 공백이 아닐 경우
                    answer -= (cntOfWord-1);    //현재까지 카운트 했던 단어 수 - (공백 이후의 단어 갯수 - 1)
                cntOfWord = 0;                  //공백 이후의 단어는 다시 0으로 초기화 한다.
            }
            else {       //현재 문자가 공백이 아닐 경우
                cntOfWord++;           //현재 단어의 문자 수 카운트
                answer++;              //단어 개수도 카운트 
            }
        }
        System.out.println(answer);
    }
}    
cs

 

<실행 결과>

 

 

<해법>

* 처음부터 공백을 넣고 입력을 시작하는 경우와 중간에 공백여러개 넣고 입력을 할 경우도 고려하여야 한다.

 

*

- 문제를 해결하기 위해 '현재 단어의 문자수 - (현재 단어의 문자 개수 - 1)' 를 하면 단어의 갯수를 카운트 하는 것 동일한 효과를 지닌다. 이를 answer변수에 저장한다.

- 그 다음 단어 차례에 문자 갯수를 answer 변수와 함께 카운트하여 다시 '현재 단어의 문자 갯수(answer 변수에 1이 카운트 된 상태) - (현재 단어의 문자 개수 - 1)'를 수행, answer 변수에 저장한다. 이를 문자열이 끝날 때 까지 반복하면 answer 변수는 단어의 문자 카운트가 끝날때 마다 하나씩 증가하게 된다.

 

String.charAt(index) : Stinrg 문자열의 index 위치에 있는 문자를 반환한다. 

 

문제 사이트 및 참고 사이트 : https://www.acmicpc.net/problem/1152



본 게시물은 개인적인 용도로 작성된 게시물입니다. 이후 포트폴리오로 사용될 정리 자료이니 불펌과 무단도용은 하지 말아주시고 개인 공부 목적으로만 이용해주시기 바랍니다.

 

 

'자료구조 및 알고리즘 > 백준' 카테고리의 다른 글

[백준]1157번 단어 공부  (0) 2017.10.09
[백준]1차원 배열 사용하기  (0) 2017.10.08
[백준]1065번 한수  (0) 2017.10.03
[백준]4673번 셀프 넘버  (0) 2017.10.02
[백준]if문 사용해보기  (0) 2017.10.01
댓글