본문 바로가기

매일매일 (Everyday)

[BOJ] - 브루트 포스 - (1) - Python

2798: 블랙잭

 

# 2798: 블랙잭 <브루트포스 알고리즘>
# 내풀이
from itertools import combinations
import sys
n , m = map(int, sys.stdin.readline().split())
cards = list(map(int, sys.stdin.readline().split()))

sums = list(map(sum, combinations(cards, 3)))

result = []

for i in sums :
    if i <= m :
        result.append(i)

print(max(result))

## 다른풀이, 직접 구현
import sys
n , m = map(int, sys.stdin.readline().split())
cards = list(map(int, sys.stdin.readline().split()))
l = len(cards)
ans = 0
for i in range(0, l-2):
    for j in range(i+1, l-1):
        for k in range(j+1, l):
            if(cards[i] + cards[j] + cards[k] > m):
                continue
            else:
                ans = max(ans, cards[i] + cards[j] + cards[k])

print(ans)

#########################################################################
# 서로다른 4장의 카드 중 3개를 뽑는 경우의 수 출력 해보기. (삼중 for문) #
# cards = [1,2,3,4]                                                     #
# l = len(cards)                                                        #
# for i in range(0, l-2):                                               #
#     for j in range(i+1, l-1):                                         #
#         for k in range(j+1, l):                                       #
#             print(cards[i], cards[j], cards[k])                       #
#########################################################################

 

7568: 덩치

# 7568: 덩치 <브루트포스 알고리즘>

n = int(input())
person = []
for _ in range(n):
    x, y = map(int, input().split())
    person.append([x, y])


k = [1 for i in range(l)]
for i in range(l) :
    for j in range(i+1, l) :
        if (person[i][0] < person[j][0]) and (person[i][1] < person[j][1]) :
            k[i] += 1

print(k)

## 나 이외에 다른 모든 경우의 수랑 비교해줘야함
n = int(input())
person = []
for _ in range(n):
    x, y = map(int, input().split())
    person.append([x, y])

for pers in person :
    k = 1
    for oth in person :
        if (pers[0] < oth[0]) and (pers[1] < oth[1]) :
            k += 1
    print(k, end=' ')

오늘 배웠던 점

- 브루트 포스는 다소 무식(?) 한 접근 방법임 모든 경우의 수를 탐색함

- 반복문이 많아질 수 밖에 없다.