본문 바로가기
Language/C++

[BOJ][C++] 1436 영화감독 숌

by 별토끼. 2018. 12. 17.
반응형

[BOJ][C++] 1436 영화감독 숌


문제

https://www.acmicpc.net/status?user_id=heekim0719&problem_id=1436&from_mine=1

풀이

숫자를 올려주면서 6이 연속으로 3개가 있는지 확인하는 방식으로 풀었습니다. 

이틀 째 이유도 모른 채 틀리기만 했는데.. 마지막에 배열 출력을 할 때 0이면 아예 출력이 되지 않도록 해서 발생하는 오류가 있었네요ㅠㅠ 하...

우선 최대 자릿수를 10으로 정하고 배열에 666을 넣어주었습니다. 그 이후 배열에 666이 있으면 n-- 를 해줍니다. 이렇게 해줄 경우 break 로 for문을 멈추고 n=0이 아닐 경우 up함수를 이용해 값을 올려줍니다. n이 0이 되면 빠져나온 뒤 0일 경우 출력을 안하다가 다른 숫자가 나오면 isOK라는 bool값을 이용해 이하 모든 자리를 출력하도록 합니다.

코드

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
40
41
42
43
#include <iostream>
using namespace std;
 
int arr[10= { 0,0,0,0,0,0,0,6,6,6 };
 
void up(int index) {
    if (arr[index] == 9) {
        arr[index] = 0;
        up(index - 1);
    }
    else 
        arr[index]++;
}
int main() {
    int n;
    cin >> n;
    while (1) {
        for (int i = 9; i >= 2--i) {
            if (arr[i] == 6 && arr[i - 1== 6 && arr[i - 2== 6) {
                n--;
                break;
            }
        }
        if (n == 0) {
            bool isOK = false;
            for (int i = 0; i < 10; i++) {
                if (!isOK) {
                    if (arr[i] == 0continue;
                    else {
                        isOK = true;
                        cout << arr[i];
                    }
                }
                else
                    cout << arr[i];
            }
            break;
        }
        else  
            up(9);
 
    }
}
cs


반응형

댓글