본문 바로가기

백준

1436)영화감독 슘

https://www.acmicpc.net/problem/1436


이 문제를 풀면서 내가 문제를 푸는 방식이 어떤 유형인지 알게 됬다.


문제를 분석하다 보면 솔루션이 있을 법도 한데 도무지 찾기 힘들 때가 있다.


그래서 가능한 모든 값을 비교해 조건에 맞는 값인 경우를 찾는 때가 있다.


이런 방식으로 무차별적으로 모든 값들을 조건과 부합하는 지 확인하는 방식을 브루트 포스 코드라 하더라.


이 문제는 6이 연속해서 3번 이상 나타나는 수들을 크기 순으로 나열했을 때 n번째에 해당하는 항을 찾아야 한다.


나는 i를 666부터 1씩 증가시켜 하나씩 찾았다..ㅋㅋ


예를들어 i가 16661이면 오른쪽 끝부터 하나씩 잘라낸다.


잘라낸 수가 6이라면 그 수를 currentDigit에 저장하고 previousDigit와 비교해 같은지를 확인한다.


만약 연속해서 6이 나타난다면 continueCount를 증가시킨다.


continueCount가 2가 되면 연속하는 6이 세 번 나타난 것이므로 count를 하나 증가시킨다.


currentDigit와 previousDigit가 한 번이라도 같지 않으면 continueCount를 0으로 만든다.


요 과정을 반복하면 666이 처음으로 등장할 때 카운팅하고 다음 수로 넘어간다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include<stdio.h>
 
int main() {
    int N;
    int tempNum;
    int count = 0;
    int currentDigit;
    int previousDigit = -1;
    int continueCount = 0;
    int i = 0;
 
    scanf("%d",&N);
 
    for (i = 666; count != N;i++) {
        tempNum = i;
 
        while (tempNum>0) {
            currentDigit = tempNum % 10;
            tempNum /= 10;
            if (currentDigit == 6 &&(currentDigit == previousDigit)) {
                continueCount++;
                if (continueCount>=2) {
                    count++;
                    break;
                }
            }
            else {
                continueCount = 0;
            }
            previousDigit = currentDigit;
        }
 
        previousDigit = -1;
        continueCount = 0;
    }
    printf("%d\n",i-1);
 
    return 0;
}
cs



'백준' 카테고리의 다른 글

1929)소수 구하기  (0) 2019.01.24
9020)골드바흐의 추측  (0) 2019.01.23
1018)체스판 다시 칠하기  (0) 2019.01.20
1463)1로 만들기  (0) 2019.01.19
1874)스택 수열  (0) 2019.01.17