반응형
이번 문제는 생각을 조금 해야하는 문제이다.
카드 세장을 뽑아서 최대한 M에 가까운 숫자를 만드는 것이 관건이다. 처음에 생각한 방법은 일일이 다 검사해서 확인해주는 방법이다. 삼중 반복문을 이용했고 큰 값을 넣어주었다. (모든 경우의 수를 다 확인해야하는 완전 탐색 문제이다.)
다음과 같은 코드를 통해 통과하였다.
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
cards = list(map(int, input().split()))
answer = 0
for i in range(N):
for j in range(i+1, N):
for k in range(j+1, N):
num = cards[i]+cards[j]+cards[k]
if num <= M:
if num > answer:
answer = num
print(answer)
다만, 비효율적이라 다른 방법이 없나 궁금했고 다른 사람들의 방법을 찾아보니 파이썬 라이브러리로 순열 조합을 사용해서 풀었다.
import sys
from itertools import combinations
input = sys.stdin.readline
N, M = map(int, input().split())
cards = list(map(int, input().split()))
for i in combinations(cards, 3):
print(i)
위 결과를 확인해보면,
알아서 모든 경우의 수의 조합을 뽑아주는 것을 확인할 수 있다.
유용한 함수인 것 같아 다음부터는 사용하면 좋을 거 같다.
반응형
'알고리즘' 카테고리의 다른 글
[알고리즘/백준] 1331번 나이트 투어 Python 파이썬 (2) | 2023.02.23 |
---|---|
[알고리즘/백준] 2511번 카드 놀이 Python 파이썬 (0) | 2023.02.21 |
[알고리즘/백준] 2506번 점수 계산 Python 파이썬 (0) | 2023.02.19 |
[알고리즘/백준] 2476번 주사위 게임 Python 파이썬 (0) | 2023.02.19 |
[알고리즘/백준] 2010번 플러그 Python 파이썬 (0) | 2023.02.18 |
댓글