티스토리 뷰
문제.
영어 대소문자와 띄어쓰기만으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.
입출력.
첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 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;
}
'Computer Science > 백준 알고리즘' 카테고리의 다른 글
[백준.05622-C언어] 다이얼 (0) | 2021.03.11 |
---|---|
[백준.02908-C언어] 상수 (0) | 2021.03.10 |
[백준-JAVA] 1차원 배열 (0) | 2021.03.08 |
[백준.02675-C언어] 문자열 반복 (0) | 2021.03.07 |
[백준.10809] 알파벳 찾기 / C언어 (0) | 2021.03.07 |
댓글