습관처럼

백준 1152 - 단어의 개수 본문

Algorithms/BOJ

백준 1152 - 단어의 개수

dev.wookii 2020. 2. 6. 11:03

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

 

1152번: 단어의 개수

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

www.acmicpc.net

문제 설명


영어 대소문자와 띄어쓰기만으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.

 

 

문제 접근


초기 접근은 공백(' ')인 경우와 !=(' ')인 경우로 나누어 풀었지만 개행문자 등으로 오류가 발생하여, 문자의 정의를 알파벳으로 정의했기때문에 알파벳의 아스키코드를 활용하여 문제를 해결하였다. 

 

 

코드


#include<iostream>
#include <cstring>
#include <string>
using namespace std;
int ans=0;
int main(){
    string str;
    getline(cin,str);
    int i=0;
    // 나만의 규칙 (공백-문자)를 단어로 간주한다.
    while(i<str.size()){
        if(i==0){
            if(str[0]!=' ') ans+=1;	// 규칙과 다른 반례: 처음 시작이 문자인 경우 +1 
            //기본 (공백-문자)경우 
            else if(str[i]==' '&&(str[i+1]>=65&&str[i+1]<=122)) ans+=1;	
        }
        else{
            if(str[i]==' '&&(str[i+1]>=65&&str[i+1]<=122)) ans+=1; //기본 (공백-문자)경우         
        } 
        i++;
    }
    cout<<ans<<"\n";
    return 0;
}

 

 

funny algorithms :0 ~

'Algorithms > BOJ' 카테고리의 다른 글

백준 2309 - 일곱 난쟁이  (0) 2020.02.07
백준 1120 - 문자열  (0) 2020.02.06
백준 14503 - 로봇 청소기  (0) 2020.02.05
백준 2455 - 지능형 기차  (0) 2020.02.04
백준 7569 - 토마토  (0) 2020.01.29