Algorithm/BOJ

[BOJ/C++] 2798번 블랙잭

DEV Lee 2020. 1. 31. 17:30
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
#include<iostream>
 
int main(void){
    int n;
    std::cin>>n;//카드의 개수 n
    int m;
    std::cin>>m;//m을 넘지 않으면서
    int arr[n]; //카드 숫자를 넣을 배열 생성 
    
    for(int i=0;i<n;i++){
        std::cin>>arr[i];//배열에 숫자 할당 
    }
    
    int total;//세 수를 합한 수 
    int max=0;//m값과 가까운 값
    for(int i=0;i<n-2;i++){//0번째부터 끝에서 세번째 까지 i값 
        for(int j=i+1;j<n-1;j++){//i다음부터  끝에서 두번째까지 j값 
            for(int k=j+1;k<n;k++){//j다음부터 끝까지 k값 
                total=arr[i]+arr[j]+arr[k];//i,j,k 더한 값 total 
                if(total<=&& total>max){//total값이 m이하이면서 max보다 크면 
                    max=total;//total이 max 
                }
            }
        }
    }
 
    std::cout<<max;//max값 출력 
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

for문을 무려 3번이나 중첩해서 풀었다.

 

 

 

 

이후 스터디에서 algorithm의 permutation 기능을 배우고 새롭게 작성해본 코드

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
#include<iostream>
#include<vector> 
#include<algorithm>//next_permutation 쓰기위한 stl 
using namespace std;
 
int main(void){
    int n,m;
    cin>>n>>m;//카드의 개수 n, 최댓값 m 
    int arr[n]; //카드 숫자 넣을 배열 생성 
    vector<int> p;//조합(conbination)을 위한 vector 생성
    
    int i; 
    for(i=0;i<n;i++)
        cin>>arr[i];//배열에 숫자 할당 
    for(i=0;i<n;i++){
        if(i<3){//3만큼 1을 넣어줌 
            p[i]=1;
            continue;
        }
        p[i]=0;
    }//카드의 개수가 4이면 1110인 배열 만들어줌
 
    int total=0
    int max=0;
    do{
        for(i=0;i<n;i++){
            if(p[i]==1)//p[i]가 1이면 
                total+=arr[i];//더해준다 
        }
        if(total>max)//total값이 max값보다 크면 
            max=total;//새로운 max값 
    }while(next_permutation(p.begin(),p.end()));//1110 -> 1101 -> 1011-> 0111 이런 순으로 조합..새로운 경우 없으면 false리턴 
    
    cout<<max<<endl;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

이건 답은 맞게 나오지만 오히려 런타임에러가 났다.