백준#2798 블랙잭

정은경·2020년 11월 3일
0

백준 문제풀이

목록 보기
48/51

1. 문제

https://www.acmicpc.net/problem/2798

  • Easy / 배열,완전탐색 / 20분 컷

FYI,
파이썬은 1초에 2천만 정도의 연산을 수행!
위의 문제는 C(n,3)의 경우의 수를 찾아서 조건을 만족하는 것을 고르는 문제임!

n(n-1)(n-2)/3!

n이 '100'이라면 아래와 같이 2천만 미만이라서 파이썬으로 계산가능!

n3 = 100**3 = 1,000,000

2. 나의 풀이

2-1. 풀이

N, M = [int(x) for x in input().split()]
nums = [int(x) for x in input().split()]

max_sum = 0

for i in range(0, N):
    for j in range(0, N):
        if i == j:
            continue
        for k in range(0, N):
            if k == i or k == j:
                continue
            temp_sum = nums[i]+nums[j]+nums[k]
            if M >= temp_sum > max_sum:
                max_sum = temp_sum

print(max_sum)

2-2. 풀이

N, M = [int(x) for x in input().split()]
nums = [int(x) for x in input().split()]

max_sum = 0

for i in range(0, N-2):
    for j in range(1, N-1):
        if len(list(set([i, j]))) < 2:
            continue
        for k in range(2, N):
            if len(list(set([i, j, k]))) < 3:
                continue
            temp_sum = nums[i]+nums[j]+nums[k]
            if M >= temp_sum > max_sum:
                max_sum = temp_sum

print(max_sum)

2-3. 풀이

N, M = [int(x) for x in input().split()]
nums = [int(x) for x in input().split()]

max_sum = 0

for i in range(0, N-2):
    for j in range(1, N-1):
        if j == i:
            continue
        for k in range(2, N):
            if k == i or k == j:
                continue
            temp_sum = nums[i]+nums[j]+nums[k]
            if M >= temp_sum > max_sum:
                max_sum = temp_sum

print(max_sum)

3. 남의 풀이

n, m = list(map(int, input().split(' ')))
data = list(map(int, input().split(' ')))

result = 0
length = len(data)

count = 0
for i in range(0, length):
    for j in range(i+1, length):
        for k in range(j+1, length):
            sum_value = data[i] + data[j] + data[k]
            if sum_value <= m:
                result = max(result, sum_value)

print(result)

4. 느낀 점

profile
#의식의흐름 #순간순간 #생각의스냅샷

0개의 댓글