c# 백준 2798 블랙잭
풀이 과정
처음 문제를 봤을 때는 어떻게 답을 구하지? 고민했다.
혹시 내가 모르는 방법이 있나 싶어서 이번 문제의 주제인 브루트 포스
에 대해 검색해봤다.
정의는 간단했다.
조합 가능한 모든 문자열을 하나씩 대입해 보는 방식으로 암호를 해독하는 방법
이 개념을 알고나니 어떻게 접근해야할지 길이 보였다. 모든 경우의 수를 전부 해보면 된다는 것이다.
답은 간단했다. 주어진 N개의 카드 중 아무 3장의 모든 조합을 계산해보는 것이다.
그리고 M
을 넘지 않으면서
가장 근접한 숫자
를 찾으면 되는 문제였다.
풀이 순서는 다음과 같다.
- N과 M의 값을 입력받아 저장한다.
- N개의 카드에 적힌 숫자를 int배열에 저장한다.
- 가장
M 근접한
3카드 숫자의 합
를 나타내는 closest 변수를 선언한다. - 3중 for문을 통해 모든 3가지 조합을 계산해본다. 1 2 3 4의 카드가 있다하면 123, 124, 134, 234 의 순서로 계산을 하는 것이다.
전체 코드
class Program
{
static void Main(string[] args)
{
string[] s = Console.ReadLine().Split(' ');
int N = int.Parse(s[0]);
int M = int.Parse(s[1]);
s = Console.ReadLine().Split(' ');
int[] cards = new int[N];
for (int i = 0; i < N; i++)
{
cards[i] = int.Parse(s[i]);
}
int closest = 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 num = cards[i] + cards[j] + cards[k];
if(num <= M && num > closest)
{
closest = num;
}
}
}
}
Console.WriteLine(closest);
}
}
댓글남기기