[Baekjoon] 2798. 블랙잭

mj·2024년 4월 28일
0

코딩테스트문제

목록 보기
5/50

2798. 블랙잭

n장의 카드에서 3장을 뽑아
합이 m을 넘지 않으면서 m과 최대한 가깝게 만든다.


🔍 내 코드

n, m = map(int, input().split())
data = list(map(int, input().split()))
sum_list = []

for x in range(0, n-2):
    for y in range(x+1, n-1):
        for z in range(y+1, n):
            temp = data[x] + data[y] + data[z]
            if temp <= m:
                sum_list.append(temp)

sum_list.sort()
print(sum_list[-1])
  • n, m 입력받음.
  • 카드에 쓰여있는 수 입력받음.
  • 3중 for문
    x [0] ~ [n-2]
    y [x+1] ~ [n-1]
    z [y+1] ~ [n]


🔍 다른 코드 1

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

for x in range(0, n-2):
    for y in range(x+1, n-1):
        for z in range(y+1, n):
            temp = data[x] + data[y] + data[z]
            if temp <= m and temp > biggest:
                biggest = temp
                

print(biggest)

이전 코드와 다른 점

  • 내 코드 : x,y,z의 합을 저장하는 sum_list를 만들어 sum_list를 정렬한 뒤 가장 큰 값(sum_list[-1])을 출력하도록 함.
  • 다른 코드 1 : 굳이 sum_list를 만들지 않고 가장 큰 값을 저장하는 변수를 만들어 바로 비교하도록 함.


🔍 다른 코드 1-2

n, m = map(int, input().split())
data = sorted(list(map(int, input().split())), reverse=True)
biggest = 0

for x in range(0, n-2):
    for y in range(x+1, n-1):
        for z in range(y+1, n):
            temp = data[x] + data[y] + data[z]
            if temp <= m:
                if temp > biggest:
                    biggest = temp
                break
                

print(biggest)

이전 코드와 다른 점

  • 카드에 쓰여있는 수를 입력받고 내림차순(큰수부터)으로 정렬하는 과정을 추가함.
  • 내림차순으로 정렬했기 때문에 for문을 돌릴수록 temp의 값은 줄어든다.
  • temp <= m일때 이 이후의 temp값은 현재보다 줄어든다.
  • 우리는 가장 큰 temp를 구하고 있기때문에 이후의 더 작은 temp는 필요없으므로 break를 통해 for문 탈출.
  • 따라서 이전코드보다 for문 돌려지는 횟수가 줄어들게 된다.
profile
일단 할 수 있는걸 하자.

0개의 댓글