백준 2495 - 연속구간
문제링크
문제 접근
- 기본적으로 두개의 커서를 두고 탐색한다. 연속적인 숫자를 찾기 전까지는 현재 문자를 가리키는 커서와 바로 다음 문자를 가리키는 커서가 함께 움직인다.
- 만약 현재 문자와 다음 문자가 같은 문자라면, 현재 문자의 커서는 고정이 되고 다음 문자의 커서만 다른 문자를 만나거나 문자열의 끝에 도달할 때까지 탐색한다.
- 연속적인 같은 문자의 개수를 세고 이전에 세었던 결과와 비교하여 큰 값을 저장한다.
의사코드(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