반응형

파이썬 / BOJ 백준 / 2798 블랙잭 - 브루트포스

https://www.acmicpc.net/problem/2798

 

2798번: 블랙잭

첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장

www.acmicpc.net

 

문제

카지노에서 제일 인기 있는 게임 블랙잭의 규칙은 상당히 쉽다. 카드의 합이 21을 넘지 않는 한도 내에서, 카드의 합을 최대한 크게 만드는 게임이다. 블랙잭은 카지노마다 다양한 규정이 있다.
한국 최고의 블랙잭 고수 김정인은 새로운 블랙잭 규칙을 만들어 상근, 창영이와 게임하려고 한다.
김정인 버전의 블랙잭에서 각 카드에는 양의 정수가 쓰여 있다. 그 다음, 딜러는 N장의 카드를 모두 숫자가 보이도록 바닥에 놓는다. 그런 후에 딜러는 숫자 M을 크게 외친다.
이제 플레이어는 제한된 시간 안에 N장의 카드 중에서 3장의 카드를 골라야 한다. 블랙잭 변형 게임이기 때문에, 플레이어가 고른 카드의 합은 M을 넘지 않으면서 M과 최대한 가깝게 만들어야 한다.
N
장의 카드에 써져 있는 숫자가 주어졌을 때, M을 넘지 않으면서 M에 최대한 가까운 카드 3장의 합을 구해 출력하시오.

 

풀이

1. 이 문제는 루트포스 알고리즘으로 풀 수 있는 문제입니다. , 모든 경우의 수를 확인해야 합니다.

2. 포인터를 i, j, k를 두어, 그 포인터로 리스트의 3개의 데이터를 가리키도록 하고, 그 합을 구해 M과 비교합니다.

전체 코드

import sys

N, M= map(int, sys.stdin.readline().split())
line = []
line = list(map(int, sys.stdin.readline().split()))

result = 0
min_v = 987654321

for i in range(0, N-2):
    for j in range(i+1, N-1):
        for k in range(j+1, N):
            sum = line[i] + line[j] + line[k]
            if M - (sum) >= 0:
                if min_v > M - (sum):
                    min_v = M - (sum)
                    result = sum
print(result)
반응형
반응형

파이썬 / BOJ 백준 알고리즘 / 1476번 날짜 계산 - 브루트 포스

 

문제 풀이

- 지구를 나타내는 수, 태양을 나타내는 수, 달을 나타내는 수을 값을 1부터 하나씩 증가시킵니다. 

- 각각의 범위를 벗어나면 1부터 다시 시작합니다. 

- 지구를 나타내는 수, 태양을 나타내는 수, 달을 나타내는 수의 값과 입력한 세 값과 일치하는지 확인하고, 

일치하면 count를 출력하고, 일치하지 않으면 count를 1 증가시킵니다. 

- 이 과정을 계속 반복합니다.

전체 코드

a, b, c= map(int, input().split())
fa = 0
fb = 0
fc = 0
count = 1

while True:
		fa += 1
		if fa == 16 :
			fa = 1;

		fb += 1
		if fb == 29 :
			fb = 1;

		fc += 1;
		if fc == 20 :
			fc = 1;

		if fa == a and fb == b and fc == c:
			print(count)
			break;
		count += 1

 

www.acmicpc.net/problem/1476

 

1476번: 날짜 계산

준규가 사는 나라는 우리가 사용하는 연도와 다른 방식을 이용한다. 준규가 사는 나라에서는 수 3개를 이용해서 연도를 나타낸다. 각각의 수는 지구, 태양, 그리고 달을 나타낸다. 지구를 나타

www.acmicpc.net

 

반응형
반응형

파이썬 / BOJ 백준 알고리즘 / 2309번 일곱 난쟁이 - 브루트 포스

 

문제 풀이

- 이번 문제는 입력된 9개의 정수 중 2개를 뽑고, 나머지 7개의 정수의 합을 구하면됩니다. 

- 가능한 모든 2개의 정수를 뽑는데, 나머지 7개의 정수의 합이 100이 된다면, 7개의 정수를 정렬하여 출력하면 됩니다.

 

전체 코드

- combinations 함수를 이용해 7개 정수를 뽑는 모든 조합의 경우를 계산합니다. 

- 그 모든 조합 가운데, 합이 100이면, 그 7개 정수를 정렬하여 출력하도록 합니다.

from itertools import combinations

num_list = [int(input()) for i in range(9)]
p = list(combinations(num_list,7))

for i in p:
    #print(sorted(i), sep='\n')
    if sum(i) == 100 :
        print(*sorted(i), sep='\n')
        break;

 

 

 

www.acmicpc.net/problem/2309

 

2309번: 일곱 난쟁이

아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.

www.acmicpc.net

 

반응형

+ Recent posts