문제 링크 : https://www.acmicpc.net/problem/2661

 

2661번: 좋은수열

첫 번째 줄에 1, 2, 3으로만 이루어져 있는 길이가 N인 좋은 수열들 중에서 가장 작은 수를 나타내는 수열만 출력한다. 수열을 이루는 1, 2, 3들 사이에는 빈칸을 두지 않는다.

www.acmicpc.net

 문제 설명  

 

숫자 1,2,3으로이루이저는 수열이있는데 인접한 두개의 수열이 똑같은 경우이 가있다면 나쁜수열이고 그런경우가 없다면 좋은 수열이다.

N이 주어졌을 때 길이 N의 좋은수열 중 가장 작은 값을 출력하시오 .

 

 알고리즘 

 

구현은 재귀로.

숫자를 하나 씩 추가할때마다 좋은수열인지 판별하고 좋은수열이아니면 return , 좋은 수열이면 숫자를 하나더추가 ... 반복

숫자를 1, 2,3 순으로 입력하면 자연스레 가장 낮은 값이 먼저 출력 된다.

출력이 이루어질 때 exit(0) 를통해 프로그램을 종료한다 .

 

좋은 수열 인지 판별법

만약 벡터의 크기가 8이다 그러면 (0 1 2 3)과 (4 5 6 7) 을 비교

그다음 (2 3 4)와 (5 6 7) 을 비교 -> (4 5),(6 7)비교 -> (6) (7) 비교 이런식으로비교 하면서 좋은수열을 판별한다 .

 

 코드 

 

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
44
45
46
47
48
49
50
51
52
53
#include<iostream>
#include<vector>
using namespace std;
 
int N;
 
//좋은 수열 판별
bool good(vector<int> v) {
    int Size = v.size();
    bool pos = false;
 
        for (int i = 1; i <= Size / 2; i++) {
            pos = false;
            for (int j = 0; j < i; j++) {
                if (v[Size - 1 - j] != v[Size - 1 -j- i]) pos = true;
            }
            if (pos == falsereturn pos;
            
        }
        return pos;
}
 
void func(vector<int> v) {
    if (v.size() > 1) {
        if (!good(v)) {//좋은수열이 아니면 return
            return;
        }
    }
    if (v.size() == N) {//좋은 수열이고 길이가 n이면 출력
        for (int i = 0; i < N; i++) {
            cout << v[i];
        }
        exit(0);//출력과동시에 exit.
    }
    vector <int> v1 = v;
    v1.push_back(1);
    func(v1);
    vector <int> v2 = v;
    v2.push_back(2);
    func(v2);
    vector <int> v3 = v;
    v3.push_back(3);
    func(v3);
}
 
 
 
 
int main() {
    cin >> N;
    vector<int> a;
    func(a);
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

 

 

 

'c++ > 백준' 카테고리의 다른 글

백준 10597번 : 순열장난  (0) 2020.04.17
백준 2210번 : 숫자판 점프  (0) 2020.04.17
백준 9663번 : N-Queen  (0) 2020.04.17
백준 1920번 : 수 찾기  (0) 2020.04.17
백준 6236번: 용돈 관리  (0) 2020.04.16
ariz1623