본문 바로가기

Algorithm (Java)

[자바/java] 백준 2798 블랙잭

유형: 배열, 완전탐색

 

1. n개의 카드 중 3개의 카드를 고르는 경우의 수 C(n,3)이며, n의 max는 100임

전체 경우의 수 C(n, 3) = n(n-1)(n-2) / 3!

 

 

2. 3중 반복문으로 모든 경우의 수를 확인하여 문제 해결가능
 n개에서 3개를 고르는 경우의 수? => 3중 for문
 가장 앞 하나의 인덱스 고정 후 
 해당 인덱스 다음 인덱스 중 추가로 값 고정
 다시 다음인덱스 중에서 세 번째 인덱스 고정

package prep.test.coding;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Baekjoon2798 {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		
		
		StringTokenizer st1 = new StringTokenizer(br.readLine());
		int result = 0; 
		int[] lenArr = new int[Integer.parseInt(st1.nextToken())];
		int targetNum = Integer.parseInt(st1.nextToken());
		
		//System.out.println(lenArr);
		//System.out.println(targetNum);
		
		StringTokenizer st2 = new StringTokenizer(br.readLine());
		for(int i=0; i<lenArr.length; i++) {
			lenArr[i] = Integer.parseInt(st2.nextToken());
		}
		
		// n개에서 3개를 고르는 경우의 수? => 3중 for문
 		// 가장 앞 하나의 인덱스 고정 후 
		// 해당 인덱스 다음 인덱스 중 추가로 값 고정
		// 다시 다음인덱스 중에서 세 번째 인덱스 고정
		
		
		for(int i=0; i< lenArr.length; i++) {
			for(int j=i+1; j<lenArr.length; j++) {
				for(int k=j+1; k<lenArr.length; k++) {
                
               		 // 각 인덱스의 합을 sum에 담기
					int sum = lenArr[i]+lenArr[j]+lenArr[k];
					//	sum이 targetNum보다 작을 경우에만 조건비교
					if(sum <=targetNum ) {
                        // sum이 targetNum보다 작고
                        // result에 담긴 값보다 크면
                        // result에 sum을 담기
						result = Math.max(result, sum);
					}
				}
			}
		}
		
        // 탐색이 완료된 후 result값 출력
		bw.write(result+"");
		
		bw.flush();
		bw.close();
		br.close();
		
	}
}

 

소회:

bufferedReader, bufferedWriter 을 수업 때 배운 후 처음 사용해보았다 

scanner, System.out.println보다는 확실히 복잡하고 구현시 외워야하는 부분도 있고

예외처리, 닫아주기 등 까다로운 부분이 있음

 

n개중 3개 고르기를 코드로 어떻게 구현할지 고민으로는 도저히 알 수 없었는데

nC3을 3중 for문으로 구현하는 부분이 재미있었다

 

 

'Algorithm (Java)' 카테고리의 다른 글

[자바/java]백준 2920 음계  (0) 2023.02.20