[python_파이썬_pass]백준_2798번_블랙잭_풀이
2024. 4. 27. 23:20ㆍ코드리뷰
728x90
반응형
공부하는허딩크 : https://www.youtube.com/live/qRYajWJrQv8?feature=shared
문제는 단순하다.
3장의 카드를 꺼내서 주어진 M대비 같거나 작은 숫자들 중에서 가장 큰 수를 뽑아내면 된다.
itertools 라이브러리가 생각은 나는데 아직 머리속에 정확히 정립이 되지 않아 무식하게 해결해보려고 한다.
3장의 카드를 뽑아내는거니까 삼중 for문으로 돌려서 카드 번호를 리스트로 만들어서 중복카드가 계산되지 않게 조건으로 걸러주고, 또 M보다 큰 경우도 걸러주면 답이 나올 것 같다.
<첫번째 시도 : 정답>
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
A = list(map(int, input().split()))
answer = []
for i in range(N):
for j in range(N):
for k in range(N):
if i == j or j == k or i == k:
continue
else:
if A[i] + A[j] + A[k] > M:
continue
else:
answer.append(A[i] + A[j] + A[k])
print(max(answer))
<두번째 시도 : 정답>
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
A = list(map(int, input().split()))
answer = []
for i in range(N):
for j in range(N):
for k in range(N):
if i == j or j == k or i == k or (A[i] + A[j] + A[k] > M) :
continue
else:
answer.append(A[i] + A[j] + A[k])
print(max(answer))
<다른사람 풀이>
처음에 아래의 반복문이 이해가 가지 않았다. 시간복잡도 개념에서 본 기억이 나는데 이게 뭐지??
다른 사람들은 왜 이렇게 했지? 의문이 들었다.
엑셀로 풀어서 하나씩 살펴보니 시간복잡도때 나온 개념이었고, 내 코드와의 차이는 나는 삼중for문에서 인덱스가 같은 녀석들은 if조건으로 제외하는 방법을 택했다면,
아래의 개념은 인덱스가 같은 녀석들을 아예 제외하는 조건이다.
라이브러리를 제외하고는 이게 내 코드보다 효율적인 것 같다.
import sys
input = sys.stdin.readline
n,m = map(int, input().split())
li = list(map(int, input().split()))
num = 0
for i in range(0, n-2 ):
for j in range(i+1, n -1):
for k in range(j+1, n):
if li[i] + li[j] + li[k] > m:
continue
if li[i] + li[j] + li[k] > num:
num = li[i] + li[j] + li[k]
print(num)
728x90
반응형
'코드리뷰' 카테고리의 다른 글
[python_파이썬]itertools 학습_순열(permutions)과 조합(combinations)_풀이 (1) | 2024.04.28 |
---|---|
★[python_파이썬_pass]백준_2798번_블랙잭_풀이_삼중for문 비교 (1) | 2024.04.28 |
[python_파이썬_이해안감]백준_24313번_알고리즘 수업 - 점근적 표기1_풀이 (0) | 2024.04.27 |
[python_파이썬]백준_알고리즘 수업 - 알고리즘의 수행 시간 1, 2, 3, 4, 5, 6_풀이 (0) | 2024.04.27 |
[python_파이썬_pass]백준_14215번_세 막대_풀이 (1) | 2024.04.26 |