블랙잭 [2798]
블랙잭 [2798]
백준 - https://www.acmicpc.net/problem/2798
2798번: 블랙잭
첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장
www.acmicpc.net
깃헙 - https://github.com/shs9509/study
문제
-
카지노에서 제일 인기 있는 게임 블랙잭의 규칙은 상당히 쉽다.
-
카드의 합이 21을 넘지 않는 한도 내에서, 카드의 합을 최대한 크게 만드는 게임이다.
-
블랙잭은 카지노마다 다양한 규정이 있다.
-
한국 최고의 블랙잭 고수 김정인은 새로운 블랙잭 규칙을 만들어 상근, 창영이와 게임하려고 한다.
-
김정인 버전의 블랙잭에서 각 카드에는 양의 정수가 쓰여 있다.
-
그 다음, 딜러는 N장의 카드를 모두 숫자가 보이도록 바닥에 놓는다. 그런 후에 딜러는 숫자 M을 크게 외친다.
-
이제 플레이어는 제한된 시간 안에 N장의 카드 중에서 3장의 카드를 골라야 한다.
-
블랙잭 변형 게임이기 때문에, 플레이어가 고른 카드의 합은 M을 넘지 않으면서 M과 최대한 가깝게 만들어야 한다.
-
N장의 카드에 써져 있는 숫자가 주어졌을 때, M을 넘지 않으면서 M에 최대한 가까운 카드 3장의 합을 구해 출력하시오.
입력
-
첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다.
-
둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다.
-
합이 M을 넘지 않는 카드 3장을 찾을 수 있는 경우만 입력으로 주어진다.
출력
-
첫째 줄에 M을 넘지 않으면서 M에 최대한 가까운 카드 3장의 합을 출력한다.
풀이과정
-
순열의 문제인데.. 거기에 sum 을 곁들인... 문제이다.
-
주어진 카드들에서 3개의 순열을 만들고 거기서 정해진 값을 넘지않는 최대값을 추출하면 된다.
느낀점
-
순열을 만들수 안다면 어렵지않다.
-
sum의 제한을 거는곳에서 좀더 효율적으로 할수있는 것을 알 수 있었다.
-
굳이 li 라는 리스트를 안만들고 바로 다루는것이다.
-
밑의 방식을 취하면 order과 li는 만들 필요가 없다!
-
밑 코드는 미완성! 참고만 바란다.
-
-
좀더 순열이라는 것을 능숙하게 다룰 필요성을 느낌! 아직 부족하다.