본문 바로가기
공부하자/알고리즘

[백준] 2798번 블랙잭 C, java

by snbrin 2022. 1. 26.

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

 

2798번: 블랙잭

첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장

www.acmicpc.net

 

C

#include <stdio.h>

int main() {

	int n, m;		//카드 갯수, 최대값	
	int cd[100];	//카드 번호
	int sum = 0;	//카드3장의 합
	int max = 0;	//현재까지의 최대값

	//1.카드개수, 최대값 입력
	scanf("%d %d", &n, &m);
	//2.카드개수만큼 각 카드값 입력
	for (int i = 0; i < n; i++) {
		scanf("%d ", &cd[i]);
	}
	//3.i는 첫번째카드, j는 두번째카드, k는 세번째카드
	for (int i = 0; i < n; i++) {				//i는 0부터 시작(i=0)
		for (int j = i+1; j < n; j++) {			//j는 1부터 시작(j=i+1)
			for (int k = j+1; k < n; k++) {		//k는 2부터 시작(k=j+1)
				//3-1.카드 3장 합하기
				sum = cd[i] + cd[j] + cd[k];
				//3-2. m값을 넘지 않으면서 이전까지 더한 값보다 큰 최대값 찾기
				if (sum<=m && sum>max)
					max = sum;
			}
		}
	}
	//4.카드3장 합의 최대값 출력
	printf("%d ", max);

	return 0;
}

 

java

package javastd1;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class bj2798 {

	public static void main(String[] args)  throws IOException {
		// TODO Auto-generated method stub
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		
		//1. 카드개수, 최대값 입력
		int n = Integer.parseInt(st.nextToken());
		int m = Integer.parseInt(st.nextToken());
 
		//2. 카드값 들어갈 배열
		int[] cd = new int[n];
 
		st = new StringTokenizer(br.readLine(), " ");
		
		//3. 카드값 배열에 차례대로 삽입
		for (int i = 0; i < n; i++) {
			cd[i] = Integer.parseInt(st.nextToken());
		}
		
		//4.search함수로 최대값 찾기 실행
		int max = search(cd, n, m);
		
		//5.탐색된 최대값 출력
		System.out.println(max);
		
	}

	static int search(int[] cd, int n, int m) {
		
		int max = 0;	//최종값이 들어갈 변수
 
		//4-1. 1,2,3번째 카드 3개씩 더하면서 
		for (int i = 0; i < n; i++) { 
			for (int j = i + 1; j < n; j++) {
				for (int k = j + 1; k < n; k++) {
					
					int sum = cd[i] + cd[j] + cd[k];
					
					//4-2.m보다 크지 않고 이전까지 더해진 값보다 큰 값 찾기
					if(sum<=m && sum >max) {
						max = sum;
					}
				}
			}
		}
		
		return max;
	}
	
	
}

 

두가지 모두 같은 알고리즘으로 해결! C와 java의 입력방식 차이밖에 없음!!