알고리즘/백준
백준_1436 : 영화감독 숌 - C++
맏리믓
2023. 5. 19. 15:43
문제

문제 해석
- 간단히 줄이면 숫자 순서대로 나열 했을때 6이 최소한 3개 이상 연속된 숫자를 찾는다.
- 이 숫자 중 원하는 번째 에 있는 수를 출력하는 문제이다.
알고리즘
- 제한 시간도 넉넉 하기 때문에 숫자를 처음부터 계쏙 올려가면서 찾아도 된다.
- 6 세개가 연속된 가장 작은 수는 '666' 이기 때문에 여기서 부터 시작 하면 된다.
- 즉 '666' 부터 1씩 증가 시키면서 해당 수를 string 으로 전환 하고 이 string 에 6이 연속된 수가 있는지만 확인 하면 된다.
코드
#include <iostream>
#include <string>
using namespace std;
int N = 0;
bool find_three_six(string a){
bool result = false;
int cnt = 0;
for(int i = 0; i < a.length(); i++){
if(a[i] == '6'){
cnt += 1;
} else {
cnt = 0;
}
if(cnt >= 3){
result = true;
break;
}
}
return result;
}
int main(){
int input;
cin >> input;
for(int i = 666; ;i++){
string i_to_s = to_string(i);
if(find_three_six(i_to_s)){
N += 1;
}
if(N == input) {
cout << i << '\n';
break;
}
}
return 0;
}