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<=m && 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 |
이건 답은 맞게 나오지만 오히려 런타임에러가 났다.