728x90
n = int(input())
f = [[] for _ in range(100)]
for _ in range(n):
    p,lc,rc = map(ord,input().split())
    f[p].append(lc) 
    f[p].append(rc) 
def preorder(x):
    print(chr(x),end='')
    for next in f[x]:
        if next == 46:
            continue
        preorder(next)
def inorder(x):
    lc,rc = f[x]
    if lc != 46:
        inorder(lc)
    print(chr(x),end='')
    if rc != 46:
        inorder(rc)
def postorder(x):
    for next in f[x]:
        if next == 46:
            continue
        postorder(next)
    print(chr(x),end='')
preorder(65)
print()
inorder(65)
print()
postorder(65)
print()

ord, chr를 활용해 더럽게 풀어보았다.

728x90

'BOJ' 카테고리의 다른 글

<15989번> 1,2,3 더하기 4  (0) 2022.01.13
<11060번> 점프 점프  (0) 2022.01.13
<11048번> 이동하기  (0) 2022.01.13
<2580번> 스도쿠  (0) 2022.01.08
<16197번> 두 동전  (0) 2022.01.07
728x90

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

 

15989번: 1, 2, 3 더하기 4

정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 4가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 합을 이루고 있는 수의 순서만 다른 것은 같은 것으로 친다. 1+1+1+1 2+1+1 (1+1+2, 1+2+1) 2+2

www.acmicpc.net

#include<iostream>
#include<algorithm>

using namespace std;
int dp[10001];
int main(){
    int t;
    cin>>t;
    for (int i = 1; i <= 10000; i++)
    {
        for (int a = 0; a<=i/3; a++)
        {
            int res1 = i-3*a;
            for (int b = 0; b <=res1/2; b++)
            {
                int res2 = res1-2*b;
                dp[i]++;
            }   
        }
    }
    for (int i = 0; i < t; i++)
    {
        int input;
        cin>>input;
        cout<<dp[input]<<'\n';
    }   
    return 0;
}
728x90

'BOJ' 카테고리의 다른 글

<1991번> 트리 순회  (0) 2023.08.28
<11060번> 점프 점프  (0) 2022.01.13
<11048번> 이동하기  (0) 2022.01.13
<2580번> 스도쿠  (0) 2022.01.08
<16197번> 두 동전  (0) 2022.01.07
728x90

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

 

11060번: 점프 점프

재환이가 1×N 크기의 미로에 갇혀있다. 미로는 1×1 크기의 칸으로 이루어져 있고, 각 칸에는 정수가 하나 쓰여 있다. i번째 칸에 쓰여 있는 수를 Ai라고 했을 때, 재환이는 Ai이하만큼 오른쪽으로

www.acmicpc.net

#include<iostream>
#include<algorithm>

using namespace std;
int field[1000];
int dp[1100];
int main(){
    int input;
    cin>>input;
    for (int i = 0; i < 1000; i++)
        dp[i]=1001;
    for (int i = 0; i < input; i++)
        cin>>field[i];
    dp[0]=0;
    for (int i = 0; i < input; i++)
        for (int j = 1; j <= field[i]; j++)
            dp[i+j]=min(dp[i+j],dp[i]+1);
    if(dp[input-1]==1001)
        cout<<"-1\n";
    else       
        cout<<dp[input-1]<<'\n';
    return 0;
}
728x90

'BOJ' 카테고리의 다른 글

<1991번> 트리 순회  (0) 2023.08.28
<15989번> 1,2,3 더하기 4  (0) 2022.01.13
<11048번> 이동하기  (0) 2022.01.13
<2580번> 스도쿠  (0) 2022.01.08
<16197번> 두 동전  (0) 2022.01.07
728x90

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

 

11048번: 이동하기

준규는 N×M 크기의 미로에 갇혀있다. 미로는 1×1크기의 방으로 나누어져 있고, 각 방에는 사탕이 놓여져 있다. 미로의 가장 왼쪽 윗 방은 (1, 1)이고, 가장 오른쪽 아랫 방은 (N, M)이다. 준규는

www.acmicpc.net

#include<iostream>
#include<algorithm>

using namespace std;
int field[1000][1000];
int dp[1000][1000];
int main(){
    int row, col;

    cin>>row>>col;
    for (int i = 0; i < row; i++)
        for (int j = 0; j < col; j++)
            cin>>field[i][j];
    dp[0][0]=field[0][0];
    for (int j = 1; j < col; j++)
        dp[0][j]=field[0][j]+dp[0][j-1];
    for (int i = 1; i < row; i++)
        dp[i][0] = field[i][0]+dp[i-1][0];
    for (int i = 1; i < row; i++)
        for (int j = 1; j < col; j++)
            dp[i][j]=max(dp[i-1][j-1],max(dp[i-1][j],dp[i][j-1]))+field[i][j];
    cout<<dp[row-1][col-1]<<'\n';
    
    return 0;
}
728x90

'BOJ' 카테고리의 다른 글

<15989번> 1,2,3 더하기 4  (0) 2022.01.13
<11060번> 점프 점프  (0) 2022.01.13
<2580번> 스도쿠  (0) 2022.01.08
<16197번> 두 동전  (0) 2022.01.07
<14500번> 테트로미노  (1) 2022.01.06
728x90

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

 

2580번: 스도쿠

스도쿠는 18세기 스위스 수학자가 만든 '라틴 사각형'이랑 퍼즐에서 유래한 것으로 현재 많은 인기를 누리고 있다. 이 게임은 아래 그림과 같이 가로, 세로 각각 9개씩 총 81개의 작은 칸으로 이루

www.acmicpc.net

#include<iostream>
#include<vector>
using namespace std;

bool is_end;
void sudoku(int row, int col,int zero,int field[][9]){
    int cnt=0;
    if(is_end)
        return;
    if(!zero){
        for (int i = 0; i < 9; i++){
            for (int j = 0; j < 9; j++)
            {
                cout<<field[i][j]<<' ';
            }
            cout<<'\n';
        }
        is_end=true;
        return;
    }
    for (int i = row; i < 9; i++)
    {
        for (int j = 0; j < 9; j++)
        {
            if(field[i][j]==0){
                row=i;
                col=j;
                break;
            }
        }
        if(field[row][col]==0)
            break;
    }
    
    if(!field[row][col])
    {
        int r=row/3;
        int c=col/3;
        for (int k = 1; k < 10; k++)
        {
            int temp[9][9];
            for (int i = 0; i < 9; i++)
            {
                for (int j = 0; j < 9; j++)
                {
                    temp[i][j]=field[i][j];
                }
            }
            temp[row][col]=k;
            bool ok=true;
            for (int i = r*3; i < r*3+3; i++)
            {
                for (int j = c*3; j < c*3+3; j++)
                {
                    if(row!=i&&col!=j&&k==temp[i][j])
                    {
                        ok=false;
                        break;
                    }
                }
                if(!ok)
                    break;
            }
            if(!ok)
                continue;
            for (int i = 0; i < 9; i++)
            {
                if(col!=i&&temp[row][i]==k)
                {
                    ok=false;
                    break;
                }    
            }
            if(!ok)
                continue;
            for (int i = 0; i < 9; i++)
            {
                if(row!=i&&temp[i][col]==k)
                {
                    ok=false;
                    break;
                }    
            }
            if(!ok)
                continue;
            sudoku(row,col,zero-1,temp);
        }
    }
}
int main(){
    int field[9][9];
    int zero=0;
    for (int i = 0; i < 9; i++)
        for (int j = 0; j < 9; j++){
            cin>>field[i][j];
            if(field[i][j]==0)
                zero++;
        }
    sudoku(0,0,zero,field);
    return 0;
}
728x90

'BOJ' 카테고리의 다른 글

<11060번> 점프 점프  (0) 2022.01.13
<11048번> 이동하기  (0) 2022.01.13
<16197번> 두 동전  (0) 2022.01.07
<14500번> 테트로미노  (1) 2022.01.06
<14888번> 연산자 끼워넣기  (0) 2022.01.05
728x90

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

 

16197번: 두 동전

N×M 크기의 보드와 4개의 버튼으로 이루어진 게임이 있다. 보드는 1×1크기의 정사각형 칸으로 나누어져 있고, 각각의 칸은 비어있거나, 벽이다. 두 개의 빈 칸에는 동전이 하나씩 놓여져 있고,

www.acmicpc.net

#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
using namespace std;
int row, col;
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};

string map[20];
int num_of_out(int x1, int x2, int y1, int y2)//
{
    int cnt=0;
    if(x1>=row||x1<0)
        cnt++;
    if(x2>=row||x2<0)
        cnt++;
    if(y1>=col||y1<0)
        cnt++;
    if(y2>=col||y2<0)
        cnt++;
    return cnt;
}
bool is_blocking(int x, int y)
{
    if(x<0||x>=row||y<0||y>=col)
        return false;
    if(map[x][y]=='#')
        return true;
    return false;
}
int find_times(int times,int x1,int y1,int x2,int y2)
{
    if(times>10)
        return -1;
    if(num_of_out(x1,x2,y1,y2)==2)
        return -1;
    if(x1==x2&&y1==y2)
        return -1;
    if(num_of_out(x1,x2,y1,y2)==1)
        return times;
    int ans=-1;
    for (int i = 0; i < 4; i++){
        int nx1=x1+dx[i];
        int nx2=x2+dx[i];
        int ny1=y1+dy[i];
        int ny2=y2+dy[i];
        if(is_blocking(nx1,ny1)){
            nx1=x1;
            ny1=y1;
        }
        if(is_blocking(nx2,ny2)){
            nx2=x2;
            ny2=y2;
        }
        int a=find_times(times+1,nx1,ny1,nx2,ny2);
        if(ans==-1 || (a != -1) && ans > a)
            ans = a;
    }
    return ans;
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    cin>>row>>col;
    int x1=-1,x2,y1,y2;
    for (int i = 0; i < row; i++)
        cin>>map[i];
    for (int i = 0; i < row; i++){
        for (int j = 0; j < col; j++){
            if(map[i][j]=='o'){
                if(x1==-1){
                    x1=i;
                    y1=j;
                }
                else{
                    x2=i;
                    y2=j;
                }
            }
        }
    }
    int res=find_times(0,x1,y1,x2,y2);
    cout<<res<<'\n';
    return 0;
}
bool is_blocking(int x, int y)
{
    if(x<0||x>=row||y<0||y>=col)
        return false;
    if(map[x][y]=='#')
        return true;
    return false;
}

여기 함수에서 마지막에 return false를 안 해주게 되면 return 값이 임의로 정해지기 때문에 조건에 해당하지 않는 경우에 대해서 꼭 리턴 값을 정해주어야 한다. 저것 때문에 틀려서 테스트 케이스는 다 돌아가는데 '틀렸습니다'가 나왔다.

728x90

'BOJ' 카테고리의 다른 글

<11048번> 이동하기  (0) 2022.01.13
<2580번> 스도쿠  (0) 2022.01.08
<14500번> 테트로미노  (1) 2022.01.06
<14888번> 연산자 끼워넣기  (0) 2022.01.05
<14225번> 부분수열의 합  (0) 2022.01.04
728x90

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

 

14500번: 테트로미노

폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변

www.acmicpc.net

#include<iostream>
#include<set>
using namespace std;
int matrix[500][500];

int type1(int row, int col){
//ㅁㅁㅁㅁ
    int res=0;
    for (int i = 0; i < row ; i++)
    {
        for (int j = 0; j < col-3; j++)
        {
            int sum=0;
            for (int k = j; k < j+4; k++)
                sum+=matrix[i][k];
            if(sum>res)
                res=sum;
        }
    }
    for (int i = 0; i < col; i++)
    {
        for (int j = 0; j < row-3; j++)
        {
            int sum=0;
            for (int k = j; k < j+4; k++)
                sum+=matrix[k][i];
             if(sum>res)
                res=sum;
        }
    }
    return res;
}
int type2(int row, int col){
//ㅁㅁ
//ㅁㅁ    
    int res=0;
    for (int i = 0; i < row-1 ; i++)
    {
        for (int j = 0; j < col-1; j++)
        {
            int sum;
            sum=matrix[i][j]+matrix[i+1][j]+matrix[i][j+1]+matrix[i+1][j+1];
            if(sum>res)
                res=sum;
        }
    }
    return res;
}
int type3(int row, int col){
//ㅁ
//ㅁ
//ㅁㅁ
    int res=0;
    //ㄴ
    for (int i = 0; i < row-2 ; i++)
    {
        for (int j = 0; j < col-1; j++)
        {
            int sum;
            sum=matrix[i][j]+matrix[i+1][j]+matrix[i+2][j]+matrix[i+2][j+1];
            if(sum>res)
                res=sum;
        }
    }
    for (int i = 0; i < row-1 ; i++)
    {
        for (int j = 0; j < col-2; j++)
        {
            int sum;
            sum=matrix[i][j]+matrix[i][j+1]+matrix[i][j+2]+matrix[i+1][j];
            if(sum>res)
                res=sum;
        }
    }
    for (int i = 0; i < row-2 ; i++)
    {
        for (int j = 0; j < col-1; j++)
        {
            int sum;
            sum=matrix[i][j]+matrix[i][j+1]+matrix[i+1][j+1]+matrix[i+2][j+1];
            if(sum>res)
                res=sum;
        }
    }
    for (int i = 0; i < row-1 ; i++)
    {
        for (int j = 0; j < col-2; j++)
        {
            int sum;
            sum=matrix[i][j+2]+matrix[i+1][j]+matrix[i+1][j+1]+matrix[i+1][j+2];
            if(sum>res)
                res=sum;
        }
    }
    //대칭
    for (int i = 0; i < row-2 ; i++)
    {
        for (int j = 0; j < col-1; j++)
        {
            int sum;
            sum=matrix[i][j+1]+matrix[i+1][j+1]+matrix[i+2][j+1]+matrix[i+2][j];
            if(sum>res)
                res=sum;
        }
    }
    for (int i = 0; i < row-1 ; i++)
    {
        for (int j = 0; j < col-2; j++)
        {
            int sum;
            sum=matrix[i][j]+matrix[i+1][j]+matrix[i+1][j+1]+matrix[i+1][j+2];
            if(sum>res)
                res=sum;
        }
    }
    for (int i = 0; i < row-2 ; i++)
    {
        for (int j = 0; j < col-1; j++)
        {
            int sum;
            sum=matrix[i][j]+matrix[i+1][j]+matrix[i+2][j]+matrix[i][j+1];
            if(sum>res)
                res=sum;
        }
    }
    for (int i = 0; i < row-1 ; i++)
    {
        for (int j = 0; j < col-2; j++)
        {
            int sum;
            sum=matrix[i][j]+matrix[i][j+1]+matrix[i][j+2]+matrix[i+1][j+2];
            if(sum>res)
                res=sum;
        }
    }
    return res;
}
int type4(int row, int col){
//ㅁ
//ㅁㅁ
//  ㅁ
    int res=0;
    for (int i = 0; i < row-2 ; i++)
    {
        for (int j = 0; j < col-1; j++)
        {
            int sum;
            sum=matrix[i][j]+matrix[i+1][j]+matrix[i+1][j+1]+matrix[i+2][j+1];
            if(sum>res)
                res=sum;
        }
    }
    for (int i = 0; i < row-1 ; i++)
    {
        for (int j = 0; j < col-2; j++)
        {
            int sum;
            sum=matrix[i][j+1]+matrix[i][j+2]+matrix[i+1][j]+matrix[i+1][j+1];
            if(sum>res)
                res=sum;
        }
    }
    //대칭
    for (int i = 0; i < row-2 ; i++)
    {
        for (int j = 0; j < col-1; j++)
        {
            int sum;
            sum=matrix[i][j+1]+matrix[i+1][j]+matrix[i+1][j+1]+matrix[i+2][j];
            if(sum>res)
                res=sum;
        }
    }
    for (int i = 0; i < row-1 ; i++)
    {
        for (int j = 0; j < col-2; j++)
        {
            int sum;
            sum=matrix[i][j]+matrix[i][j+1]+matrix[i+1][j+1]+matrix[i+1][j+2];
            if(sum>res)
                res=sum;
        }
    }
    return res;
}
int type5(int row, int col){
//ㅁㅁㅁ
//  ㅁ
    int res=0;
    for (int i = 0; i < row-2 ; i++)
    {
        for (int j = 0; j < col-1; j++)
        {
            int sum;
            sum=matrix[i][j]+matrix[i+1][j]+matrix[i+2][j]+matrix[i+1][j+1];
            if(sum>res)
                res=sum;
        }
    }
    for (int i = 0; i < row-1 ; i++)
    {
        for (int j = 0; j < col-2; j++)
        {
            int sum;
            sum=matrix[i][j]+matrix[i][j+1]+matrix[i][j+2]+matrix[i+1][j+1];
            if(sum>res)
                res=sum;
        }
    }
    //대칭
    for (int i = 0; i < row-2 ; i++)
    {
        for (int j = 0; j < col-1; j++)
        {
            int sum;
            sum=matrix[i][j+1]+matrix[i+1][j+1]+matrix[i+2][j+1]+matrix[i+1][j];
            if(sum>res)
                res=sum;
        }
    }
    for (int i = 0; i < row-1 ; i++)
    {
        for (int j = 0; j < col-2; j++)
        {
            int sum;
            sum=matrix[i+1][j]+matrix[i+1][j+1]+matrix[i+1][j+2]+matrix[i][j+1];
            if(sum>res)
                res=sum;
        }
    }
    return res;
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int row, col;
    cin>>row>>col;
    for (int i = 0; i < row; i++)
        for (int j = 0; j < col; j++)
            cin>>matrix[i][j];
    set<int> st;
    st.insert(type1(row,col));
    st.insert(type2(row,col));
    st.insert(type3(row,col));
    st.insert(type4(row,col));
    st.insert(type5(row,col));
    cout<<*st.rbegin()<<'\n';
    return 0;
}

 

728x90

'BOJ' 카테고리의 다른 글

<2580번> 스도쿠  (0) 2022.01.08
<16197번> 두 동전  (0) 2022.01.07
<14888번> 연산자 끼워넣기  (0) 2022.01.05
<14225번> 부분수열의 합  (0) 2022.01.04
<6603번> 로또  (0) 2022.01.04
728x90

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

 

14888번: 연산자 끼워넣기

첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, 

www.acmicpc.net

#include<iostream>
#include<set>

using namespace std;
set<int> st;
int digit[102];
int res[102];
int oper[4];
void cal(int digit_idx,int res_idx,int oper_idx)
{
    if(oper[oper_idx]<0)//해당 연산자가 안남아있을때,
        return;
    if(digit_idx==2)
    {
        switch (oper_idx)
        {
        case 0:
            res[res_idx]=digit[digit_idx-1]+digit[digit_idx];
            break;
        case 1:
            res[res_idx]=digit[digit_idx-1]-digit[digit_idx];
            break;
        case 2:
            res[res_idx]=digit[digit_idx-1]*digit[digit_idx];
            break;
        case 3:
            if(digit[digit_idx]<0)
                res[res_idx]=-((-digit[digit_idx-1])/digit[digit_idx]);
            else
                res[res_idx]=digit[digit_idx-1]/digit[digit_idx];
            break;
        }
    }
    else
    {
        switch (oper_idx)
        {
        case 0:
            res[res_idx]=res[res_idx-1]+digit[digit_idx];
            break;
        case 1:
            res[res_idx]=res[res_idx-1]-digit[digit_idx];
            break;
        case 2:
            res[res_idx]=res[res_idx-1]*digit[digit_idx];
            break;
        case 3:
            if(res[res_idx-1]<0)
                res[res_idx]=-((-res[res_idx-1])/digit[digit_idx]);
            else
                res[res_idx]=res[res_idx-1]/digit[digit_idx];
            break;
        }
    }
    if(!oper[0]&&!oper[1]&&!oper[2]&&!oper[3]){
        st.insert(res[res_idx]);
        return;
    }
    oper[0]--;
    cal(digit_idx+1,res_idx+1,0);
    oper[0]++;
    oper[1]--;
    cal(digit_idx+1,res_idx+1,1);
    oper[1]++;
    oper[2]--;
    cal(digit_idx+1,res_idx+1,2);
    oper[2]++;
    oper[3]--;
    cal(digit_idx+1,res_idx+1,3);
    oper[3]++;
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int n;
    cin>>n;
    for (int i = 1; i <=n; i++)
    {
        cin>>digit[i];
    }
    for (int i = 0; i < 4; i++)
    {
        cin>>oper[i];
    }
    int digit_idx=2;
    int res_idx=3;
    
    oper[0]--;
    cal(digit_idx,res_idx,0);
    oper[0]++;
    oper[1]--;
    cal(digit_idx,res_idx,1);
    oper[1]++;
    oper[2]--;
    cal(digit_idx,res_idx,2);
    oper[2]++;
    oper[3]--;
    cal(digit_idx,res_idx,3);
    oper[3]++;
    cout<<*st.rbegin()<<'\n'<<*st.begin()<<'\n';
    return 0;
}

나중에 다시 깔끔하게 짜봐야겠다.

728x90

'BOJ' 카테고리의 다른 글

<16197번> 두 동전  (0) 2022.01.07
<14500번> 테트로미노  (1) 2022.01.06
<14225번> 부분수열의 합  (0) 2022.01.04
<6603번> 로또  (0) 2022.01.04
<1436번> 영화감독 숌  (0) 2021.12.22
728x90

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

 

14225번: 부분수열의 합

수열 S가 주어졌을 때, 수열 S의 부분 수열의 합으로 나올 수 없는 가장 작은 자연수를 구하는 프로그램을 작성하시오. 예를 들어, S = [5, 1, 2]인 경우에 1, 2, 3(=1+2), 5, 6(=1+5), 7(=2+5), 8(=1+2+5)을 만들

www.acmicpc.net

#include<iostream>
#include<vector>
#include<set>
using namespace std;
int arr[20];
bool included[20];
set<int> st;
void pick(int idx,int n){
    idx++;
    if(idx==n)
    {
        int s=0;
        for (int i = 0; i < n; i++)
            if(included[i])
                s+=arr[i];
        st.insert(s);
        return;
    }
    included[idx]=1;
    pick(idx,n);
    included[idx]=0;
    pick(idx,n);
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    int n;
    cin>>n;
    for (int i = 0; i < n; i++)
        cin>>arr[i];
    int idx=-1;
    pick(idx,n);
    int min_val=1;
    while(1)
    {
        if(st.find(min_val)==st.end())
            break;
        min_val++;
    }
    cout<<min_val<<'\n';   
}

만든 부분수열의 합을 set 자료구조에 넣게 되면 내부적으로 오름차순 정렬을 해준다. 

1부터 시작해서 set에 없는 수가 나타났을 경우에 그 값을 출력해주면 된다.

728x90

'BOJ' 카테고리의 다른 글

<14500번> 테트로미노  (1) 2022.01.06
<14888번> 연산자 끼워넣기  (0) 2022.01.05
<6603번> 로또  (0) 2022.01.04
<1436번> 영화감독 숌  (0) 2021.12.22
<10814번> 나이순 정렬  (0) 2021.12.20
728x90

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

 

6603번: 로또

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로

www.acmicpc.net

#include<iostream>
using namespace std;
int arr[13];
int permu[13];
void pick(int per_idx,int arr_idx,int n){
    per_idx++;
    if(arr_idx==n-1 && per_idx<5)
        return;
    if(per_idx==6)
    {
        for (int i = 0; i < 6; i++)
        {
            cout<<permu[i]<<' ';
        }
        cout<<'\n';
        return;
    }
    for (int i = arr_idx+1; i < n; i++)
    {
        permu[per_idx]=arr[i];
        //cout<<per_idx<<' '<<i<<' '<<n<<'\n';
        pick(per_idx,i,n);
        //cout<<per_idx<<' '<<i<<' '<<n<<'\n';
    }
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    while(1)
    {
        int n;
        cin>>n;
        if(!n) return 0;
        for (int i = 0; i < n; i++)
            cin>>arr[i];
        int idx=-1;
        int arr_idx=-1;
        pick(idx,arr_idx,n);
        cout<<'\n';
    }
}

 

728x90

'BOJ' 카테고리의 다른 글

<14888번> 연산자 끼워넣기  (0) 2022.01.05
<14225번> 부분수열의 합  (0) 2022.01.04
<1436번> 영화감독 숌  (0) 2021.12.22
<10814번> 나이순 정렬  (0) 2021.12.20
<2609번> 최대공약수와 최소공배수  (1) 2021.12.17

+ Recent posts