관리 메뉴

JIE0025

[백준알고리즘] 2798번 : 블랙잭, 파이썬 본문

알고리즘

[백준알고리즘] 2798번 : 블랙잭, 파이썬

Kangjieun11 2021. 3. 11. 14:32
728x90

문제는 아래 사이트에 들어가면 확인 할 수 있다. 

www.acmicpc.net/problem/2798

 

 

목표

N장의 카드에 써져 있는 숫자가 주어졌을 때, M을 넘지 않으면서 M에 최대한 가까운 카드 3장의 합을 구해 출력하기

 

 

입력 정보 확인

첫째 줄

● 카드의 개수 N(3 ≤ N ≤ 100), 

● 더했을 때 넘지 않아야 하는 수 M(10 ≤ M ≤ 300,000)

 

둘째 줄

카드에 쓰여 있는 수 (100,000을 넘지 않는 양의 정수)

 

 

먼저 코드를 확인해보자.

 

입력 모두 문자열로 받은 후에 숫자로 바꿔주는 처리를 해주었다. 

input() 은 문자열을 받고. split()  함수를 통하여 띄어쓰기를 구분자 삼아 나누어진다. 

list(map(int, input().split())) 은 입력받은 문자열을 띄어쓰기로 구분하여 값을 나누고 정수로 변경시켜 리스트에 넣는 코드이다.

nm[0] : n의 값

nm[1] : m의 값

cards[0] ~ cards[] : 각 카드의 값

 

max : 0으로 초기화 한후, m 을 넘지 않는 가장 큰값이 나올 떄마다 업데이트 해준다.

length = len(cards) : 카드의 개수

 

카드 세개를 골라서 더한 값이 지금까지의 max 값을 넘지 않으면 업데이트를 해줘야 한다.

세개를 선택할 때 인덱스가 겹치면 안되므로. 

 

첫번째 반복문은 0부터 length까지 a를 

두번째 반복문은 a+1 부터 length까지, b를

세번째 반복문은 b+1 부터 length까지 c를 이용했다.

 

 sum = cards[a] + cards[b] + cards[c] 를 한 후

sum이 max보다 크거나 같고, m값보다 작으면 max를 업데이트 해주었다.

 

 

끄읕!