티스토리 뷰
문제
영어 대소문자와 띄어쓰기만으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.
입력
첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열의 앞과 뒤에는 공백이 있을 수도 있다.
출력
첫째 줄에 단어의 개수를 출력한다.
예제 입력 1
The Curious Case of Benjamin Button
예제 출력 1
6
예제 입력 2
Mazatneunde Wae Teullyeoyo
예제 출력 2
3
예제 입력 3
Teullinika Teullyeotzi
예제 출력 3
2
해설
간단한 문제다. 띄어쓰기(스페이스)로 구분되는 단어의 개수를 알아내야 한다. 즉 입력받은 문자열에서 스페이스의 개수를 세어 1을 더하면 단어의 개수가 된다. 그런데 주의해야 할 점은 입력받은 문자열의 맨 처음과 끝에도 무의미한 스페이스가 포함되어 있을 수 있다. 이 경우 적절하게 스페이스의 개수를 감산해 주면 된다.
참, scanf()
함수의 용법에 관련해 알아두어야 할 부분이 있다. scanf()
는 기본적으로 ' '
, \0
, \n
에서 입력이 중단뙨다. 따라서 이 문제와 같이 공백이 포함된 문자열을 전체를 입력받을 수 없다. 따라서 그 대안으로 \n
만을 입력 중단점으로 하는 fgets()
함수를 사용할 수 있다. 이 함수는 세 개의 인자를 가지고 있다. 인자는 ⓐ 배열의 이름 ⓑ 최대 입력 길이 ⓒ 입력받을 스트림의 파일 객체(여기서는 표준 입력에 해당하므로 stdin)으로 본 코드에서는 fgets(input_string, 1000000, stdin);
이 된다.
굳이 저처럼 scanf()
를 꼭 써야겠다는 경우에는 서식문자에서 정규직 표현을 이용하여 이 문제에서 원하는 입력을 받을 수 있다. scanf()
의 서식 문자는 %
으로 시작하는 d, f, s, c
가 아닌 정규직 표현을 사용할 수 있다. 죽 [^\n]
라고 지정하면 \n
(개행문자)만을 제외하곤 모두 입력을 받으란 의미가 된다. 정규식 표현에서는 []
은 찾고자 하는 패턴이나 범위를 지정할 수 있는데 그 앞에 ^
을 주게 되면 해단 패턴이나 범위는 제외한다는 의미로 바뀐다.
- 입력받은 문자열(input_string)에서 스페이스의 개수를 센다(space).
for (i = 0; i < len; ++i) {
if (input_string[i] == ' ') {
space += 1;
}
- 문자열의 맨 앞(first_space)과 끝(end_space)에 스페이스가 있는 경우 위 단어 수에서 각각 1을 뺀다.
if (input_string[0] == ' ')
first_space = 1;
if (input_string[len - 1] == ' ')
end_space = 1;
이 코드를 완성하여 확정된 단어 수(words)를 출력한다.
소스코드: C
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
char input_string[1000000];
int i, len, words, space = 0, first_space = 0, end_space = 0;
scanf("%[^\n]", input_string);
/** fgets(input_string, 1000000, stdin); */
len = strlen(input_string);
if (input_string[0] == ' ')
first_space = 1;
if (input_string[len - 1] == ' ')
end_space = 1;
for (i = 0; i < len; ++i) {
if (input_string[i] == ' ') {
space += 1;
}
}
words = space - first_space - end_space + 1;
printf("%d\n", words);
return 0;
}
'Python > 심사문제' 카테고리의 다른 글
백준(BAEKJOON): 상수(2908번) (0) | 2020.03.28 |
---|---|
백준(BAEKJOON): 다이얼(5622번) (0) | 2020.03.28 |
백준(BAEKJOON): 단어 공부(1157번) (0) | 2020.03.25 |
백준(BAEKJOON): 문자열반복(2675번) (0) | 2020.03.24 |
백준(BAEKJOON): 알파벳 찾기(10809번) (0) | 2020.03.24 |
- Total
- Today
- Yesterday
- QLineEdit
- 백준
- QComboBox
- words
- 북한말
- Mac
- 리규찬
- baekjoon
- 어원
- C
- QGridLayout
- books
- MacOS
- QtDesigner
- tips
- Python
- word
- python3
- NK
- 소수
- 유래
- 리찬규
- PyQt5
- judge
- BOJ
- locallibrary
- setText()
- QLabel
- django
- Tistory
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |