문체 출처: www.acmicpc.net/problem/1152
1. 코드
#include <stdio.h>
#include <string.h>
int main(void)
{
int i, len, cnt = 0;
char arr[1000000];
scanf("%[^\n]", arr);
len = strlen(arr);
/* 공백 문자 하나만 입력 시 0으로 출력 후 종료 */
if(len == 1)
{
if(arr[0] == ' ')
{
printf("0\n");
return 0;
}
}
/* 공백 문자 갯수 인식 */
for(i = 1; i < len-1; i++)
{
if(arr[i] == ' ')
cnt++;
}
printf("%d\n", cnt + 1);
return 0;
}
2. 문제 해결 과정
일단 %[^\n]을 이용해서 문자열을 입력받았는데 이것은 scanset를 이용한 것인데 그것의 의미는 \n을 제외하고 모든 것들을 입력한다는 의미이다. 그리고 이것을 이용하여 공백을 포함한 모든 문자를 입력받고 공백 문자를 인식하면 횟수를 증가시키고 횟수보다 1 증가시킨 값을 출력하면 된다.
그런데 예제를 볼 때 마지막에 띄어쓰기를 하거나 문자를 입력하기 전에 처음에 띄어쓰기를 하는 경우(ex : " Mazatneunde Wae Teullyeoyo", "Teullinika Teullyeotzi ")가 있어서 공백 문자의 횟수를 확인할 때 맨 앞부분과 뒷부분을 제외시켰다.
그래도 실패를 할 것인데 공백 문자 하나만 입력을 하는 데이터가 있어서 입력받은 문자가 1개일 때 그것이 공백이라면 0으로 출력하게 하였다.
이렇게 문제를 해결했다.
3. 느낀 점
scanset에 대한 문제가 가끔씩 나와 조금 자세하게 알아보고 싶다는 생각이 들었다. 지금 추측하는 것은 ^를 쓰면 반대의 의미를 갖는다는 것과 [] 안에 있는 문자만 인식하는 것이다. 내가 모르는 다른 방법이 여러 가지 존재할 것 같아 나중에 천천히 알아보아야겠다.
'컴퓨터 > 백준 알고리즘' 카테고리의 다른 글
백준 알고리즘 5622번: 다이얼 C언어 (0) | 2020.01.01 |
---|---|
백준 알고리즘 2908번: 상수 C언어 (0) | 2019.12.29 |
백준 알고리즘 1157번: 단어 공부 C언어 (4) | 2019.12.27 |
백준 알고리즘 2675번: 문자열 반복 C언어 (0) | 2019.12.23 |
백준 알고리즘 10809번: 알파벳 찾기 C언어 (0) | 2019.12.22 |