탭고리즘

탭고리즘 2025-1-27 블랙잭

종식당 2025. 1. 28. 14:02
728x90
반응형

 


  • 문제설명
    입력으로 카드의 개수 N과 숫자 M이 주어지면 다음으로 들어오는 N개의 입력 숫자 중에서 3개를 골라 더해서 M을 넘지 않고 가장 M에  가깝게 만드는 숫자를 구하면 된다.
  • 제출코드     
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 입력 처리
        int n = scanner.nextInt(); // 카드의 개수
        int m = scanner.nextInt(); // 합의 최대값
        int[] cards = new int[n];  // 카드 배열

        for (int i = 0; i < n; i++) {
            cards[i] = scanner.nextInt(); // 카드 값 입력
        }
        scanner.close();

        // 가능한 조합 탐색
        int maxSum = 0;

        // 세 장의 카드를 선택하는 모든 조합 탐색
        for (int i = 0; i < n - 2; i++) {              // 첫 번째 카드 선택
            for (int j = i + 1; j < n - 1; j++) {      // 두 번째 카드 선택
                for (int k = j + 1; k < n; k++) {      // 세 번째 카드 선택
                    int currentSum = cards[i] + cards[j] + cards[k];
                    if (currentSum <= m) {             // 조건을 만족하는 경우
                        maxSum = Math.max(maxSum, currentSum); // 최댓값 갱신
                    }
                }
            }
        }

        // 결과 출력
        System.out.println(maxSum);
    }
}

 

  • 코드설명
    for문을 돌면서 세가지의 카드를 선택할  것이기 때문에 for문을 3번 중첩을 통해 사용할 것이다.
    첫번째첫 번째 for문을 0부터 n-2까지 다음 for문은 첫 번째 for문에서 뽑은 카드랑 겹치지 않고 다음 카드부터 뽑을 것이기 때문에 i+1부터 n-1까지 돌 것이다. 세 번째 for문은 두 번째 카드의 다음부터 뽑을 것이기 때문에 j+1부터 n까지 돌 것이다.
    그리고 뽑은 세가지의 카드를 모두 더한 다음 이 값이 m보다 작거나 같을 때 둘 중에 최댓값을 출력해 주면 된다. 

728x90
반응형