본문 바로가기
C, C++/Problem Solving

[백준BOJ 1152번] 단어의 개수 해설

by hseoy 2020. 11. 11.
반응형

[문제 내용]

아래 링크로 설명을 대신한다.

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

 

1152번: 단어의 개수

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

www.acmicpc.net

[해답 코드 및 설명]

#include <stdio.h>

int main() {
    int bc, c, wc=0;
	
    c=getchar();
    bc=c;
    while((c=getchar())!='\0'&&c!='\n') {
        if(c==' ')wc++;
        bc=c;
    }
	
    if(bc==' ')wc--;
    printf("%d", wc+1);
}

이 문제에서 가장 핵심이 되는 포인트는 띄어쓰기(공백)이다. 우리가 단어와 단어를 구분하는 기준이 띄어쓰기이므로 단어를 카운팅하기 위해서는 이 띄어쓰기(공백)의 개수를 카운트해야 하는 것이다. 

위 코드에서는 getchar()로 하나하나씩 문자를 입력받아 그것이 공백인지 아닌지 체크해서 공백일 경우 wc, word count를 증가시키고 있다. 여기서 마지막 문자가 공백일 경우 word count를 빼는 데 그 이유는 문자열과 문자열 사이, 단어와 단어 사이의 공백만 카운트하기 위해서이다. 이렇게 하면 단어의 개수는 문자열 사이의 공백 개수 + 1이 되므로 wc에 1을 더해서 출력하였다.

 

반응형

댓글