[문제]
https://www.acmicpc.net/problem/1436
1436번: 영화감독 숌
666은 종말을 나타내는 수라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타워
www.acmicpc.net
[문제 풀이]
처음엔 어떻게 접근해야 할지 감이 안왔는데 알고리즘 종류가 브루트 포스인걸 보고 전부 돌려보자고 판단할 수 있었던 문제. (다음부터는 알고리즘 종류를 안봐도 감이 올 수 있게 연습을 하자.)
숫자를 666부터 계속해서 올려가면서 666을 카운트 하면서 입력값에 카운트가 걸리면 해당 값을 반환하도록 만들었다.
문제를 풀다 보면 오류가 생길 수 있는 부분이 6666이다. 6666의 경우에는 666x에서도 666이고 x666에서도 666이 있기에 난 666이 나오는 순간 해당 부분을 break를 통해서 빠져나오게 만들었다.
[코드]
#include <iostream>
#include <string>
using namespace std;
string find_count(int n){
string answer = "";
int count = 0;
//666부터 시작해서 계속 i올리기
for(int i = 666;;i++){
//answer는 숫자 i를 string으로 변환한다.
answer = to_string(i);
//j는 answer의 문자길이 -2(연속으로 3개를 볼 거기 때문에) 만큼 반복.
for(int j = 0;j<answer.length() - 2;j++){
//만일 연속으로 3개가 6이라면
if(answer[j] == '6' && answer[j + 1] == '6' && answer[j + 2] == '6'){
//count를 올리자.
count++;
//break를 해주는 이유는 만일 안해준다면 6666에서 count가 2번 올라간다.
break;
}
}
//만일 count가 n이라면
if(count == n){
return answer;
}
}
return 0;
}
int main(){
int n;
cin>>n;
string answer = "";
answer = find_count(n);
cout<<answer<<endl;
return 0;
}