백준 1152번 단어의 갯수 세기 문제<java>

2016. 12. 7. 21:47Algorithm Solution

<단어의 갯수>


요즘 알고리즘 꾸준히 풀려고 노력하는 중이다. 하루에 3문제라도 풀려고 하는데...왜이렇게 시간이 오래 걸리는지ㅠㅠ 

아직 초보라서 그런듯..ㅠㅠ 

아무튼 이번에 푼 문제는 단어의 갯수를 세는 프로그램이다. 


문제는 아래와 같다..





맨 처음엔 그냥 빈칸의 갯수만 체크해서 출력하였더니 역시나...틀렸다...이런 간단한 문제일리가 없지..당연..ㅋㅋㅋ

먼저 고려해야할 사항은 "The Curious" 단어가 있다면 the 와 Curious 사이에 띄어쓰기가 한칸인지 두칸인지...n칸인지를 고려해야했다. 


<띄어쓰기를 편하게 '_'으로 표시>

그래서 The _ _ Curious 이렇게 띄어쓰기가 두칸이라면 첫번째 띄어쓰기를 체크하고 또 연속해서 바로 전 문자가 빈칸인지 아닌지 검사한다. 빈칸이 아닌 문자라면 당연 갯수를 증가하고 빈칸이라면 갯수증가를 하지 않는다. 


이랬더니 또 틀렸다는 문구가 나서 생각해보니 맨 처음 빈칸을 입력하고 단어를 입력할 때와 단어를 다 입력하고 마지막에 계속 띄어쓰기를 n 번 한 경우가 생각이 났다. 


그래서 그런 경우를 다 고려하기 위해서!!

Trim() 메서드를 사용해서 앞뒤 공백을 다 지워버렸다.


그리고 나서 또 틀렸다.....마지막으로 빈칸으로만 입력한 경우를 고려하지 않아서 였다. 

그래서 Boolean checkEmpty라는 변수를 선언해서 checkEmpty==false 이라면 cnt+1을 하였고,(띄어쓰기가 단어 사이사이마다 하나씩 있다면 단어의 갯수= 띄어쓰기+1 이기 때문이다.)

checkEmpty==true 값이면 그냥 cnt 값만 출력하였다.

 

그랬더니 맞았다 ㅋㅋㅋㅋ 아래는 자바로 구현한 소스이다. 누군가에게 도움이 되었음 좋겠다! 



<java>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import java.util.Scanner;
 
/**
 * Created by nhs0912 on 2016-12-05.
 */
public class Main {
 
 
    public static void main(String[] args) {
 
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        int cnt = 0;
        str = str.trim();//앞뒤 빈칸 제거
        Boolean checkEmpty = false//빈칸만으로 이루어져있는지 검사
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) == ' ' && str.charAt(i - 1!= ' ') {
                //띄어쓰기를 찾고 띄어쓰기 바로 앞의 문자가 빈칸이 아닌경우
                cnt++;
            }
            else{
                checkEmpty=true;
            }
        }
 
        if(checkEmpty)
        {
            System.out.println(cnt+1);
        }else {
            System.out.println(cnt);
        }
 
 
    }
}
 
 
 
cs


'Algorithm Solution' 카테고리의 다른 글

숫자 팰린드롬(palindrome)  (0) 2016.12.12
백준 2577번 숫자의 갯수  (0) 2016.12.07
Prime Number(소수) 구하기 java  (0) 2016.01.13
피보나치 수열 구하기  (0) 2016.01.10
<30계단>angle(open)  (0) 2015.10.24