백준(C언어) 풀이/문자열

백준(C) 1152번 단어의 개수 풀이

개발윗미 2021. 7. 14. 18:56

C로 구현한 1152번 단어의 개수 구하기 문제 풀이입니다.

 

https://www.acmicpc.net/problem/1152

 

1152번: 단어의 개수

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

www.acmicpc.net


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

int main() {
    char input[1000001];
    scanf("%[^\n]", input);
    int len = strlen(input), count=0;
    if(len == 1 && input[0] == ' '){
        printf("0");
        return 0;
    }
    for(int i=1; i<len-1; i++) {
        if(input[i] == ' ')
            count++;
    }
    printf("%d", count+1);
}

 

문자열을 입력받아 길이를 구해 정수형 변수 len에 저장합니다. 문자열 길이가 1이고 배열의 첫번째 값이 공백일 경우

 

0을 출력하고 종료하도록 합니다. 조건을 모두 만족하지 않을 경우 for문으로 넘어가게 되고 문자열의 처음과 끝에

 

공백이 들어올 수 있기 때문에 1부터 문자열 길이-1만큼 반복문을 수행합니다. 이 반복문은 공백의 갯수를 세어주는데,

 

배열 각 자리의 값이 공백일 경우 정수형 변수 count를 1씩 증가시켜줍니다.

 

단어의 개수는 공백+1개이기 때문에 최종적으로 count에 +1 한 값을 출력할 수 있도록 해줍니다.

 

(ex. 'Hello World Hi' : 공백 2개, 단어 3개)

 

[참고] '%[^\n]' : \n가 나올때까지 공백을 포함하여 읽는다.

 

 

[소감]

문제를 해결하는 아이디어는 있었으나 어떻게 공백을 포함하여 입력받을 수 있을까라는 의문이 생겼다.

 

다른 분들의 입력방식을 참고하고 %[^\n]가 어떤 기능인지 학습하여 적용시켰다. 이러한 학습을 통해 지식의 폭을

 

좀 더 넓힐 수 있어 뭔가 뿌듯한거 같다!