'PS(Problem Solving)/문자열'에 해당되는 글 1건

  1. 2019.03.03 [백준/BOJ] 1152번 단어의 개수 풀이
posted by 귀염둥이채원 2019. 3. 3. 17:19

문제링크: https://www.acmicpc.net/problem/1152


# 문제

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


# 입력

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


# 출력

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


# 예제 입력 1 

The Curious Case of Benjamin Button


# 예제 출력 1 

6


###########################################################

풀이1

1. 문자열을 입력받아서 split(" ")한다.

2. split 결과의 배열을 체크해서 공백이 아닌 경우만 카운팅한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Main {
    public static void main(String[] args) throws FileNotFoundException {
        Scanner sc = new Scanner(System.in);
        
        int strCount=0;
        String inputStr = sc.nextLine();
        String strArr[] = inputStr.split(" ");;
    
        for (int i=0; i<strArr.length; i++) {
            if (strArr[i].equals(""!= true) {
                strCount++;
            }
        }
        System.out.println(strCount);
        
        sc.close();
    }
}
cs


풀이2

1. 문자열을 입력받아서 문자들을 모두 체크한다.

2. 문자의 아스키코드 범위값을 체크해서 연속된 문자열이면 카운팅하지 않는다.

   (즉 초기 한번만 카운팅)

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
public class Main {
    static int getStringCount(String inputStr) {
        int count=0;
        int wordFlag=0;
        
        for (int i=0; i<inputStr.length(); i++) {
            char temp = inputStr.charAt(i);
            if (wordFlag == 0) {
                if ((temp >= 'A' && temp <='Z'|| (temp >= 'a' && temp <='z')) {
                    count++;
                    wordFlag = 1;
                }
            }
            if (temp == ' ') {
                wordFlag = 0;
            }
        }
        return count;
    }
    
    public static void main(String[] args) throws FileNotFoundException {
        Scanner sc = new Scanner(System.in);
        
        String inputStr = sc.nextLine();
        System.out.println(getStringCount(inputStr));
        sc.close();
    }
}
cs


# 회고

split, trim, isEmpty 사용법을 학습하자


# 다른 정답 참고

https://rightbellboy.tistory.com/40

https://zoonvivor.tistory.com/126