[BOJ] 1152. 단어의 개수
문제: 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.
첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열은 공백으로 시작하거나 끝날 수 있다.
1.Python
s=list(input().split())
print(len(s))
파이썬 구현으로는 쉽다! 공백을 기준으로 split하여 list로 만들고, 그 리스트의 길이를 출력하도록 하면 된다.
2.C99
#include <stdio.h>
main() {
int count = 0;
char s[1000005];
gets(s);
for (int i = 0;s[i]!='\0'; i++) {
if (s[i] != ' ') {
if (s[i + 1] == ' ') count++;
if (s[i + 1] == '\0') count++;
}
}
printf("%d", count);
}
(내가 잘 못하는 C언어) if조건문을 적을때 약간 헤맸다.. 문장 앞이나 문장 끝에 공백이 와도 오직 단어 개수만 셀 수 있도록 해야한다. 입력 함수로는 gets()를 사용하였다.
여기서 gets()란 \n 가 입력되면 \n을 삭제하고 그 자리에 \0을 넣어 해당 문자열 배열에 저장토록 해주는 입력함수 이다. 그러니까 i'm very hungry\n를 입력하고 엔터를 치면(\n), 문자 끝에 \n이 오는게 아니라 문자열의 끝을 나타내는 \0이 입력되는 것이다. 'i' ''' 'm' ' ' 'v' 'e' 'r' 'y' ' ' 'h' 'u' 'n' 'g' 'r' 'y' '\0' 가 저장되는 것.
먼저 단어 개수를 셀 int형 변수 count를 지정해주었다. 그리고 문자열을 저장해줄 char형 s를 지정. 배열의 크기는 문제 조건에 따라 맞춰주었다. for반복문을 만들어주었다. 문자열의 끝(\0) 전까지 반복하도록 하였다. 안에는 if조건문을 여러개 배치했는데, 여기서 주의해야할 점은 공백문자가 왔을때마다 count를 증가시키면 안된다는 점이다. (왜냐하면 문장 앞이나 끝에 공백문자가 오면 count를 세면 안되므로.)
공백문자가 아닌 무엇인가가 오면, 다음 인덱스의 위치에 공백문자가 있을 경우에만 count ++. 마지막 if조건문을 생각 못해서(바보..) 잠깐 헤맸는데 문장 끝에 공백이 안오고 그냥 \0이 있는 경우도 고려해야한다. (자꾸 앞, 뒤에 공백문자가 오는걸 생각하다보니 미처 고려를 못한듯.) 따라서 그다음 위치에 \0이 있다면 count를 증가시켜야한다. 당연히 앞에서 공백이 아닌 문자가 있을때에만.
'💻STUDY > BOJ' 카테고리의 다른 글
[BOJ] 1157. 단어 공부 (C) (0) | 2022.01.14 |
---|---|
[BOJ] Bronze IV 부수기: 열일곱번째 날 (0) | 2022.01.12 |
[BOJ] Bronze IV 부수기: 열여섯번째 날 (0) | 2022.01.11 |
[BOJ] Bronze IV 부수기: 열다섯번째 날 (0) | 2022.01.10 |
[BOJ] Bronze IV 부수기: 열네번째 날 (0) | 2022.01.09 |
댓글