Computer Science/백준 (Python)
[10단계] 브루트 포스
inee0727
2022. 6. 20. 02:20
2798번. 블랙잭
▼해설보기
더보기
N, M = map(int, input().split())
card_num = list(map(int, input().split()))
result = 0
for i in range (N):
for j in range (i+1, N):
for k in range(j+1, N):
if card_num[i] + card_num[j] + card_num[k] > M :
continue
else :
result = max(result,card_num[i] + card_num[j] + card_num[k] )
print(result)
1. 모든 경우의 수를 다 찾아봐야 하는 완전탐색 문제이다.
N, M = map(int, input().split())
card_num = list(map(int, input().split()))
result = 0
N,M을 입력받아 int로 변환하고, 카드에 쓰여 있는 수들은 list화 하여 저장한다.
그리고 문제 조건에 적합한 수를 저장하여 반환하기 위한 변수 result를 선언한다.
2. 3개의 카드를 뽑아야하며 이에 대한 모든 경우의 수를 살펴보기 위해 3중 for문을 이용한다.
for i in range (N):
for j in range (i+1, N):
for k in range(j+1, N):
if card_num[i] + card_num[j] + card_num[k] > M :
continue
else :
result = max(result,card_num[i] + card_num[j] + card_num[k] )
print(result)
모든 경우의 수를 확인하며 각각의 값을 더한 뒤, 세 카드의 값이 M보다 클 경우는 continue, M보다 크지 않을 경우는 정답의 가능성이 존재하므로 result 변수에 저장한다. 이렇게 모든 경우를 반복하면 결국 result 변수에는 M 또는 M에 가장 가까운 값이 저장될 것이며 이를 출력한다.
2231번. 분해합
▼해설보기
더보기
정답
n = int(input())
result = 0
for i in range(n):
a = sum(map(int,str(i)))
num = a + i
if num == n :
result = i
break
print(result)
*이와 같이 코드 작성하면 출력초과로 나온다.
n = int(input())
for i in range(n):
a = sum(map(int, str(i)))
result = i + a
if result == n:
print(i)
break
else :
print(0)
N이라는 변수에 입력값을 입력 후, N과 비교하기 위한 변수 result를 선언한다.
str함수를 통해 i의 각 자리수를 리스트화하여 A에 저장하고, i와 각 자리수가 들어간 A 리스트의 합을 더한다.
그리고 생성자가 없을 경우에는 0을 출력한다. (result 0으로 설정)
7568번. 덩치
▼해설보기
더보기
num_student = int(input())
student_list = []
for _ in range(num_student):
weight, height = map(int, input().split())
student_list.append((weight, height))
for i in student_list:
rank = 1
for j in student_list:
if i[0] < j[0] and i[1] < j[1]:
rank += 1
print(rank, end = " ")
이 문제는 자기보다 무겁고(weight), 큰(height) 사람이 몇명인지 재서 본인의 등수를 정하면 된다.
n 명을 n-1번씩 전수 비교해보면 된다.