일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- C++
- SW봉사
- 소프티어
- 코딩봉사
- 백준
- softeer
- kotlin
- 1과목
- 코딩교육봉사
- CJ UNIT
- MYSQL
- 백준 알고리즘
- 회고
- 시나공
- programmers
- 알고리즘
- 스프링
- 자바
- 프로그래머스
- 공부일지
- python
- 코틀린
- 파이썬
- BFS
- 정보처리산업기사
- 데이터베이스
- SQL
- 백준알고리즘
- java
- 문제풀이
- Today
- Total
JIE0025
[백준알고리즘] 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를 업데이트 해주었다.
끄읕!
'알고리즘' 카테고리의 다른 글
[BOJ - BFS] 14940번 : 쉬운 최단거리 ( python ) (0) | 2022.04.15 |
---|---|
[BOJ - 수학] 4375번 : 1 ( python ) (0) | 2022.01.31 |
[백준알고리즘] 1966번 : 프린터큐, 파이썬 (0) | 2021.03.10 |
[백준알고리즘] 14888번 : 연산자 끼워넣기 #스터디 3주차 (0) | 2020.06.13 |
[백준알고리즘] 14503번 : 로봇 청소기 #스터디 3주차 (0) | 2020.06.13 |