728x90
https://www.acmicpc.net/problem/1018
1. 문제 이해부터 잘해야된다. 666이 포함된 숫자들 중에서 N번째로 작은 숫자를 출력하라는 말이다.
5번째 4666
6번째 5666
7번째 6660
8번쨰 6661
여기서 생각해보면 7번째에 만약 5666 -> 6666 이된다면 6660보다 더 큰 숫자가 된다
즉 666이 연속해서 나오는 숫자들 중에서 작은순서대로 가야하는데 5666 다음으로 작은숫자가 6666이전에 6660이 존재한다는 말이다.
여기까지 이해한다면 그다음은 쉽게 생각해볼수 있다.
13번쨰 6666
14번째 6667
17번째 7666
.
.
.
500번쨰 166699
2. 위의 이해를 바탕으로 브루트 포스 전략을 이용해서 숫자를 하나하나 비교해보면서 답을 찾으면된다.
나의답안)
#include <stdio.h>
int main()
{
int death_count = 0;
int N;
int check = 0;
int count = 0;
int num;
scanf("%d", &N);
num = 666;
while (1)
{
count = 0;
check = num;
while (check > 0)
{
if (check % 10 == 6)
count++;
else
count = 0;
if (count == 3)
{
death_count++;
break ;
}
check = check / 10;
}
if (death_count == N)
break;
num++;
}
printf("%d\n", num);
}
728x90
'backjoon > 브루트포스' 카테고리의 다른 글
백준 7568 - 덩치 c언어 (2) | 2023.01.05 |
---|---|
백준 2231 c언어 -분해합 (0) | 2023.01.05 |
백준 2798 블랙잭 (C언어) (0) | 2023.01.01 |
댓글