본문 바로가기
Programming Solve/BOJ

BOJ 5637 - 가장 긴 단어 / C++

by msm1029 2022. 4. 10.
반응형

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

 

5637번: 가장 긴 단어

단어는 알파벳(a-z, A-Z)과 하이픈(-)으로만 이루어져 있다. 단어와 다른 문자(마침표, 숫자, 심볼, 등등등...)로 이루어진 글이 주어졌을 때, 가장 긴 단어를 구하는 프로그램을 작성하시오. Apple의

www.acmicpc.net

 

 

풀이

"E-N-D"라는 문자열이 들어오기 전까지 계속해서 입력을 받는다.

받은 문자열은 소문자로 바꿔주고 'a'와 'z'사이 또는 '-'일 경우 임시 단어 변수인 word에 저장한다.

 

만약 다른 문자가 나왔다면 단어가 끝났으므로 단어의 길이를 측정하여 최댓값을 갱신한다.

최댓값이라면 정답 단어를 바꿔주고 다시 임시 단어 변수를 비워준다.

 

for문이 끝났을 때에도 같은 방식으로 최댓값 갱신을 수행한다.

"E-N-D"가 들어오면 가장 긴 단어를 출력해주면 된다.

 

 

코드

#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

int main(){
    int maxLen = -1;
    string ans;
    
    while(true){
        string tmp;
        int len = 0;

        cin >> tmp;
        if(tmp == "E-N-D") break;

        transform(tmp.begin(), tmp.end(), tmp.begin(), ::tolower);

        string word = "";
        for(int i=0; i<tmp.size(); i++){
            if((tmp[i] >= 'a' && tmp[i] <= 'z') || tmp[i] == '-'){
                word += tmp[i];
            }
            else {
                len = max(len, (int)word.size());
                if(len > maxLen){
                    ans = word;
                    maxLen = len;
                }
                word = "";
            }
        }

        len = max(len, (int)word.size());
        if(len > maxLen){
            ans = word;
            maxLen = len;
        }
    }

    cout << ans;
}
반응형

'Programming Solve > BOJ' 카테고리의 다른 글

BOJ 10816 - 숫자 카드 2 / C++  (0) 2022.04.13
BOJ 2609 - 최대공약수와 최소공배수 / Swift  (0) 2022.04.11
BOJ 9342 - 염색체 / C++  (0) 2022.04.10
BOJ 14405 - 피카츄 / C++  (0) 2022.04.09
BOJ 2929 - 머신 코드 / C++  (0) 2022.04.09