일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- dacon
- PYTHON
- 맥북
- 편스토랑 우승상품
- 코로나19
- Docker
- 프로그래머스
- github
- leetcode
- ubuntu
- 자연어처리
- 데이콘
- ChatGPT
- 편스토랑
- hackerrank
- SW Expert Academy
- Baekjoon
- Kaggle
- programmers
- 프로그래머스 파이썬
- 캐치카페
- 금융문자분석경진대회
- gs25
- 우분투
- 더현대서울 맛집
- Real or Not? NLP with Disaster Tweets
- 파이썬
- 백준
- AI 경진대회
- Git
- Today
- Total
솜씨좋은장씨
[BaekJoon] 2798번 : 블랙잭 (Python) 본문
코딩 1일 1문제! 오늘의 문제는 백준의 블랙잭 입니다.
👨🏻💻 문제 풀이
블랙잭은 3개의 카드 숫자의 합을 최대한 21에 가까운 숫자로 만드는 사람이 이기는 게임입니다.
그런데 이 문제에서의 블랙잭 게임은 새로운 룰을 만들어서 진행합니다.
3개의 카드 숫자의 합을 보는 것은 맞는데 그 수를 21에 가까운 숫자로 만드는게 아니라
입력받은 M이라는 숫자에 최대한 가까우면서도 M을 넘지 않는 수를 만드는게 목표입니다.
combinations를 활용하여 내가 받은 카드로 만들 수 있는 모든 카드 3개의 조합을 만든 다음
각각의 합을 구하고 그 합 중에 M을 넘지 않는 수를 찾으면 그게 정답입니다.
코드를 하나씩 살펴보면
N, M = map(int, input().split())
card_numbers = list(map(int, input().split()))
먼저 카드의 개수 N과 우리가 최대한 비슷한 숫자를 만들어야하는 M을 입력받습니다.
그리고 그 다음줄에는 내가 받은 카드의 숫자목록을 입력받습니다.
from itertools import combinations
조합을 만들어주는 itertools의 combinations를 import 해준 다음
comb_3 = list(combinations(card_numbers, 3))
카드 숫자들을 가지고 3개씩 묶은 조합을 만들어 주고 이를 list로 만들어줍니다.
sum_list = [sum(comb) for comb in comb_3 if sum(comb) <= M]
그리고 각 조합을 sum()을 활용해 각 숫자조합들의 합을 구합니다.
list_comprehension 을 활용하였습니다.
이때 M을 넘는 합은 필요없으므로 if sum(comb) <= M 조건을 걸어 조합의 합이 M을 넘지않는 경우만 남깁니다.
sum_list.sort()
sum_list[-1]
마지막으로 정렬한 뒤에 맨 마지막 값을 정답으로 해도 되고
max(sum_list)
가장 큰 값을 max를 활용해 구해줘도 정답입니다.
시간이 더 빠른건 max(sum_list) 입니다.
그럼 전체 코드는 아래를 참고해주세요.
👨🏻💻 코드 ( Solution )
from itertools import combinations
def blackjack(M, card_numbers):
comb_3 = list(combinations(card_numbers, 3))
sum_list = [sum(comb) for comb in comb_3 if sum(comb) <= M]
return max(sum_list)
if __name__ == "__main__":
N, M = map(int, input().split())
card_numbers = list(map(int, input().split()))
print(blackjack(M, card_numbers))
'Programming > 코딩 1일 1문제' 카테고리의 다른 글
[BaekJoon] 5704번 : 팬그램 (Python) (0) | 2021.10.16 |
---|---|
[BaekJoon] 11728번 : 배열 합치기 (Python) (0) | 2021.10.15 |
[BaekJoon] 11179번 : 2진수 뒤집기 (Python) (0) | 2021.10.13 |
[BaekJoon] 12605번 : 단어순서 뒤집기 (Python) (0) | 2021.10.12 |
[BaekJoon] 3449번 : 해밍 거리 (Python) (0) | 2021.10.11 |