반응형
문제 링크 : https://www.acmicpc.net/problem/1436
문제 풀이
문제 설명이 잘 이해가 되지 않아 다른 블로그를 통해 이해했다.
일단 종말의 숫자란 6이 최소 3개 이상 들어간 숫자이고 N 번째 영화의 제목은
종말의 숫자이면서 N번째로 작은 숫자이다.
예를 들면 666, 1666, 2666, 3666, 4666, 5666, 6660, 6661, 6662
이런식으로 진행되는데 5666 다음에 6666 이 되지 않는 이유는 6660 이 더 작은
종말의 숫자이기 때문이다. 따라서 1씩 더해가며 '666'이 있는지 찾는다.
또한, 연속으로 들어가야 하기 때문에 6066과 같은 경우는 포함되지 않는다.
소스 코드
#include <iostream>
using namespace std;
bool isTripleSix(int num){
int cnt = 0; //연속된 6이 있는지 확인하는 변수. cnt가 3일 경우 return true
bool cont = false; //6이 연속되었는지 확인하는 bool 변수
while(num > 0){
if(cnt == 3) return true;
int tmp;
tmp = num % 10;
if(tmp == 6) cont = true;
else cont = false;
if(tmp == 6 && cont){
cnt++;
}
else cnt = 0;
num /= 10;
}
if(cnt == 3) return true;
else return false;
}
int main(){
int n, i=665; //666이 첫 연속된 수이므로 665부터 시작한다.
int cnt = 0;
cin >> n;
while(true){
if(isTripleSix(i)) cnt++;
if(cnt == n){
cout << i;
break;
}
i++;
}
}
반응형
'Programming Solve > BOJ' 카테고리의 다른 글
BOJ 1920 수 찾기 / C++, 시간 초과 방지 팁 (0) | 2021.09.01 |
---|---|
BOJ 1931 회의실 배정 / C++ (0) | 2021.08.31 |
BOJ 2810 컵홀더 / C++ (0) | 2021.08.27 |
BOJ 2851 슈퍼 마리오 / C++ (0) | 2021.08.27 |
BOJ 3040 - 백설 공주와 일곱 난쟁이 / C++ (0) | 2021.08.26 |