티스토리 뷰

문제. 

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

 

입출력.

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

 

방법.

%[입력 조건]을 활용해보려고 한다. 만약 소문자 입력만 가능하다고 하면 %[a-z]라고 표현할 수 있고, 1~3까지만 입력 가능하다면 %[123] 또는 %[1-3]으로 표현할 수 있다. 만약 입력하면 안 되는 조건을 설정하면 해당 조건을 충족했을 때에 입력이 종료된다.

 

1. 개행 시 입력 종료되도록 %[^\n] 를 사용해 입력을 받는다.

2. 단어의 개수를 저장할 int형 변수 cnt를 하나 선언하고 0으로 초기화한다.

3. 문자열의 길이만큼 for문을 반복하고, 요소가 공백이 아닌 경우 cnt+1을 한다.

4. 요소의 값이 공백이 아닌 경우 while문을 사용해서 요소가 공백인 i까지 증가해준다.

5. 최종 단어 개수를 출력한다.

 

#include <stdio.h>
#include <string.h>

int main(void){
    char str[1000000];
    scanf("%[^\n]",str);

    //단어 개수 확인하기
    // 1. 공백이 아닌 경우 단어 개수 +1
    // 2. while문을 사용해서 공백일때까지 i++
    int cnt=0 ;
    // here : 
    for(int i=0; i<strlen(str); i++){
        if(str[i]!=' ') cnt++;
        while(str[i]!=' '){
            i++;
        }
    }

	//단어 개수 출력하기
    printf("%d\n",cnt);
    return 0;
}

 

 

 

 

 

 

1152번: 단어의 개수

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

www.acmicpc.net

 

댓글
«   2024/12   »
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
최근에 올라온 글
글 보관함
Total
Today
Yesterday