※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 25183번 문제인 인생은 한 방이다.
문제는 아래 링크를 확인하자.

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

 

25183번: 인생은 한 방

문자열 $S$의 부분 문자열이란, 문자열의 연속된 일부를 의미한다. 

www.acmicpc.net

주어지는 문자열의 첫 글자서부터 보면서 지금 확인 하는 문자가 이전 문자와 이웃한 문자인지, 즉 지금 확인하는 문자가 (이전문자 + 1) 또는 (이전문자 - 1)와 같은지를 체크하며 연속된 글자의 개수를 세나가자.

 

주어지는 문자열의 맨 처음과 맨 끝에 A~Z와는 연속할 수 없는 다른 문자가 하나씩 더 있다고 생각하고 구현한다면 첫 문자 또는 마지막 문자를 포함하는 (성질을 만족하는) 문자열의 길이를 구하는 구현을 특별한 예외처리 없이 편하게 할 수 있다.

 

아래는 제출한 소스코드이다.

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

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	string s; cin >> s >> s; s += 'a';
	int prev = 'a', cnt = 0, mx = 0;
	for (auto l : s) {
		int cur = (int)l;
		if (cur == prev + 1 || cur == prev - 1) cnt++;
		else {
			mx = max(mx, cnt);
			cnt = 1;
		}
		prev = cur;
	}

	if (mx < 5) cout << "NO";
	else cout << "YES";
}
728x90

+ Recent posts