[BOJ] 1152번: 단어의 개수 (C#)

Pilgyeong_G·2020년 7월 27일
0

BOJ

목록 보기
7/9
post-thumbnail

문제 링크: https://www.acmicpc.net/problem/1152


언뜻 보면 쉬운 문제인 것 같지만 함정이 약간 있다.

'the csharp'   -> 2
' the csharp'  -> 2
' the csharp ' -> 2
''             -> 0
' '            -> 0

다음과 같이 출력이 돼야 한다.

이때 양 끝 좌우 공백도 유의해야 하고, 입력으로 아무것도 입력되지 않거나 공백만 있는 경우도 유의해야 한다.

먼저 나는 다음과 같이 작성했다.

using System;
using System.Text;
 
internal static class Program
{
    private static void Main()
    {
        Console.WriteLine(Console.ReadLine().WordCount());
    }
 
    private static int WordCount(this string source)
    {
        if (string.IsNullOrWhiteSpace(source))
        {
            return 0;
        }
 
        StringBuilder word = new StringBuilder();
        int wordCount = 0;
        for (int i = 0; i < source.Length; i++)
        {
            if (source[i] == ' ' && word.Length != 0 || i == source.Length - 1)
            {
                wordCount++;
                word.Clear();
                continue;
            }
            word.Append(source[i]);
        }
 
        return wordCount;
    }
}

먼저 string.IsNullOrWhiteSpace 메서드를 사용하여 문자열이 비어있거나 공백만 있는지 확인하여 필요에 따라 0을 반환한다. 처음에 이 부분을 처리하지 않고 아래 로직을 구현하면 ' '와 같이 공백만 있는 문자열을 넣으면 0이 아닌 1을 반환하여 문제를 틀리게 된다.

이후 문자열을 반복하면서 각 문자를 공백이 나올 때까지 조합하기 위해 StringBuilder를 사용한다.

반복할 때 공백문자를 만나면 StringBuilder 인스턴스를 초기화하고 wordCount 값에 1을 더한다.

이때 문자열의 맨 처음 공백문자 처리를 위해 StringBuilder 인스턴스의 길이가 0이면 그냥 넘어간다.

마지막 단어도 계산하기 위해 i == source.Length -1 조건도 함께 추가한다. 이 조건을 처리하지 않으면 문자열의 마지막에 공백이 없는 경우 문자열의 마지막 단어를 처리하지 못하고 반복문을 빠져나가게 되어 틀린다.

마지막으로 결괏값 wordCount를 반환하면 끝.

0개의 댓글