백준 2495 - 연속구간

1 minute read

문제링크

문제 접근

  • 기본적으로 두개의 커서를 두고 탐색한다. 연속적인 숫자를 찾기 전까지는 현재 문자를 가리키는 커서와 바로 다음 문자를 가리키는 커서가 함께 움직인다.
  • 만약 현재 문자와 다음 문자가 같은 문자라면, 현재 문자의 커서는 고정이 되고 다음 문자의 커서만 다른 문자를 만나거나 문자열의 끝에 도달할 때까지 탐색한다.
  • 연속적인 같은 문자의 개수를 세고 이전에 세었던 결과와 비교하여 큰 값을 저장한다.

의사코드(pseudo-code)

- for i=0 to 2:
	- cin >> str
	- cnt = 1, max = 1
	- for j=0 to 6:
		- if str[j] == str[j+1]:
			- k = j+1
			- while str[j]==str[k]:
				- if (k+=1) >7:
					- break
				- cnt += 1
			- j = k-1
			- if max < cnt:
				- max = cnt
			- cnt = 1
	- cout << max << "\n"

소스코드 및 분석

전체 코드

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

int main()
{
	for (int i = 0; i < 3; i++) {
		string str;
		cin >> str;
		int cnt = 1, max = 1;
		for (int j = 0; j < 7; j++) {
			if (str[j] == str[j + 1]) {
				int k = j + 1;
				while (str[j] == str[k]) {
					if (k++ > 7) break;
					cnt++;
				}
				j = k - 1;
				if (max < cnt)
					max = cnt;
				cnt = 1;
			}
		}
		cout << max << "\n";
	}
}
  • if(k++ > 7) 구문은 후위연산자를 활용해 두가지 연산을 한줄로 진행하는 코드다. (k++ and then if문 k>7 진행)

Leave a comment