아이공의 AI 공부 도전기

[Baekjoon] 2798번 블랙잭 (C++, Python)

 

 

 

C++

 

방법 1 - 2020KB, 0ms, 672B

초기 방법 - m과 같을 시 중지하기 위한 bool 인자와 if문 계산

#include <iostream>
using namespace std;
int main() {   
	int n, m, i, j, k, near_m, tmp=0;
	bool com = false;
	cin >> n >> m;
	int arr[n];
	for (i=0; i<n; i++){
		cin >> arr[i];
	}
	for (i=0; i<n-2; i++){
		near_m = arr[i];
		for (j=i+1; j<n-1; j++){
			near_m += arr[j];
			for (k=j+1;k<n;k++){
				near_m += arr[k];
				if (near_m == m) {
					tmp = near_m;
					com = true;					
					break;
				}
				else {
					if (near_m < m && near_m > tmp)
						tmp = near_m;					
					near_m -= arr[k];
				}
			}			
			if (com) break;
			else near_m -= arr[j];						
		}
		if (com) break;
		else near_m -= arr[i];												
	}
	cout << tmp << endl;	
}

 

방법 2 - 2020KB, 0ms, 342B

모든 경우의 수를 다 계산해버리고 최종에서 결과 내는 방법

 

#include <iostream>
using namespace std;
int main() {   
	int n, m, i, j, k, s, t=0;
	cin >> n >> m;
	int arr[n];
	for (i=0; i<n; i++) cin >> arr[i];
	for (i=0; i<n-2; i++){
		for (j=i+1; j<n-1; j++){
			for (k=j+1;k<n;k++){
				s = arr[i] + arr[j] + arr[k];
				if (s <= m && s > t)t = s;	
			}					
		}												
	}
	cout << t << endl;	
}

 

 

 

방법 3 - 1112KB, 0ms, 306B

 

#include <stdio.h>
int main() {   
	int n, m, i, j, k, s, t=0;
	scanf("%d %d", &n, &m);
	int a[n];
	for (i=0;i<n;i++) scanf("%d", &a[i]);
	for (i=0;i<n-2;i++){
		for (j=i+1;j<n-1;j++){
			for (k=j+1;k<n;k++){
				s=a[i]+a[j]+a[k];
				if (s<=m&&s>t)t = s;	
			}					
		}												
	}
	printf("%d", t);	
}

 

Python

 

https://aigong.tistory.com/28?category=900998 참조

 

 

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading