건전한 건전지
article thumbnail
728x90
반응형

 

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

 

5637번: 가장 긴 단어

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

www.acmicpc.net

문자열 기본 문제이다

어제 새벽에 풀어서 그런가 너무 어렵게 접근하다가 잘 안 돼서 아침에 다시 풀었더니 쉽게 풀렸다....

항상 그렇지만 문제의 조건을 잘 확인 해야한다.

다른 문자들도 단어로 처리해서 한 번, 하이픈을 단어로 처리하지 않아서 또 한 번 실패를 경험했다 ㅠ

 

전체 코드

#include <bits/stdc++.h>
using namespace std;

// 17 + 26 = 43
// 49 + 26 = 75

int main() {
	cin.tie(NULL);
	cout.tie(NULL);
	ios_base::sync_with_stdio(false);

	string maxStr;

	while (1) {
        
        // cin은 공백, \n 등을 포함하지 않고 s에 저장함
		string s; cin >> s;
		
        // 종료 조건인 E-N-D가 나오면 종료
		if (s == "E-N-D")
			break;
        
        // 현재 입력받은 문자열의 길이를 세기 위한 변수
		int curCount = 0;
		string tmp = "";
        
        // a-Z와 '-' 만을 문자로 인식할 것임. 
		for (int i = 0; i < s.length(); i++) {
			if (((s[i] - '0') > 48 && (s[i] - '0') < 76) || s[i] == '-') {
				curCount++;
				tmp += s[i];
			}
			else if (((s[i] - '0') > 16 && (s[i] - '0') < 44) || s[i] == '-') {
				curCount++;
				tmp += tolower(s[i]);
			}
		}
        // 다른 특수 문자들 ( ~ , . + )을 제외한 문자의 숫자를 세주고, 기존 max의 문자열과 비교하여 삽입 
        // 지금 카운팅해본 문자열이 기존 문자열보다 짧다면 tmp는 버리고 기존 maxStr을 보존한다
		if (curCount > maxStr.length()) {
			maxStr = tmp;
		}
	}

	cout << maxStr;


}

 

728x90
반응형
profile

건전한 건전지

@건전한 건전지

나는 언리얼의 왕이 될 남자다 👑