[BOJ 백준] 1152 - 단어의 개수 (C / C++ / Python)

문제 바로가기

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


 

관련 알고리즘

- 해당 없음


정답 및 해설

문자열 한 줄을 입력받아 그 문장이 몇 개의 단어로 이루어져 있는지 판단하는 문제이다.

 

해당 문제에서는 예제 입력에서 예외를 발생시키는 상황에 관한 힌트가 주어졌다.

첫 번째 문자와 마지막 문자에 공백이 입력되는 것인데

대부분의 문제에서는 위와 같은 예외 입력을 알려주지 않으니, 직접 찾아서 처리해야 한다.

 

힌트와 같이 문자열 중간에 공백이 있는 경우 단어의 경계로 간주할 수 있지만

처음과 마지막에 공백이 들어가는 경우에는 그렇지 않다.

 

이를 코드를 작성할 때 반드시 잊지말고 반영하여야 한다.

 

C++

더보기
#include<iostream>
#include<cstring>
using namespace std;
int main(){
    string s;
    int i,cnt=1;
    getline(cin,s);
    
    if(s.length()==1 && s[0]==' '){
        cout<<"0"; return 0;
    }
    
    for(i=1; i<s.length()-1; i++)
        if(s[i]==' ')
            cnt+=1;
        
    cout<<cnt;
}

먼저 문자열을 편하게 다루기 위해 cstring 헤더 파일을 include 했다.

C++에서문자열 한 줄은 getline(cin, s)를 사용하여 입력받을 수 있다.

문자열을 입력받은 후 조건문을 통해 공백 문자 하나만 입력한 경우를 예외로 처리하여 0을 출력한다.

이후 문자열의 첫 번째 문자와 마지막 문자를 제외한 나머지 문자에 공백이 있을 경우

단어의 경계로 판단하여 단어의 개수(cnt)를 1 증가시키고 마지막에 출력하여 정답을 구한다.

 

※ string 타입 변수의 길이는 변수명.length()로 구할 수 있으며, 문자열의 길이는 long long 타입으로 반환된다.


C

더보기
#include<stdio.h>
#include<string.h>
int main() {
    char s[1000001];	//입력받은 문자열
    int cnt=1;	//단어의 개수

    scanf("%[^\n]", s);
	
    if(strlen(s)==1 && s[0]==' '){
        printf("0"); return 0;
    }
	
    for(int i=1; i<strlen(s)-1; i++) 
        if(s[i]==' ') cnt++;

    printf("%d", cnt);
}

먼저 문자열을 편하게 다루기 위해 string.h 헤더 파일을 include 했다.

C 언어에서 공백을 포함한 문자열은 scanf("%[^\n]", s)를 사용하여 입력받을 수 있다.

문자열을 입력받은 후 조건문을 통해 공백 문자 하나만 입력한 경우를 예외로 처리하여 0을 출력한다.

이후 문자열의 첫 번째 문자와 마지막 문자를 제외한 나머지 문자에 공백이 있을 경우

단어의 경계로 판단하여 단어의 개수(cnt)를 1 증가시키고 마지막에 출력하여 정답을 구한다.

 

※ string.h 헤더파일의 strlen 함수를 사용해서 문자열 s의 길이를 구할 수 있다.


Python

더보기
words = input().split(' ')
print(len(words))

먼저 input 함수를 사용해 문자열을 입력받는다.

다음으로 split() 함수를 사용하여 문자열을 공백을 기준으로 나눠 리스트로 만든 후 words 변수에 저장한다.

words 리스트의 개수를 len 함수로 구한 뒤 그대로 출력하여 정답을 구할 수 있다.

 

파이썬의 경우 코드의 길이를 짧게 작성하는데 유리하기 때문에 아래와 같은 축약 해서 작성할 수도 있다.

print(len(input().split()))

 

※ split() 함수 내에 구분자를 입력하지 않으면 공백 문자를 기본으로 구분자로 사용한다.