BaekJoon 2798
BaekJoon 2798 [BruteForce]
블랙잭
블랙잭 알고리즘은 BruteForce유형의 문제중에서 가장 대표적인 문제라고 볼 수 있다.
위 링크에 문제와 입력 및 출력 예시가 있으니 참고하면 될 것 같다.
먼저 Python 코드다.
#BlackJack - BaekJoon - 2798
N, M= input().split() # 3 <= n <= 100, # 10 <= M <= 300,000
N = int(N) # 문자열 타입을 정수형으로 변환
M = int(M) # 각각 카드의 개수와 카드의 합을 입력받는다.
j_j = 0 #각 시작하는 index번호를 지정
y_y = 0
k_k = 0
list_num = []
temp = 0 # 각 카드의 합을 임시 버퍼로 저장
sum = 0 # M과 가장 가까우면서 temp보다 큰 값
list_num = [int(x) for x in input().strip().split()]
# for i in range(N):
# list_num.append(int(input()))
for j in list_num[j_j:len(list_num)-2]:
y_y = j_j + 1
for y in list_num[y_y:len(list_num)-1]:
k_k = y_y + 1
for k in list_num[k_k+2:]:
temp = j + y + k
if(temp <= M and temp > sum ):
sum = temp
j_j = j_j + 1
print(sum)
더 간단하게 구현할 수 있었을 것 같아 생각을 계속 해봤는데 아직 더 좋은 아이디어가 생각나지 않았다...
for i in range(N):
list_num.append(int(input()))
위와 같이 각각의 카드의 값들을 입력받으려고 했지만 백준에서 제공하는 예제와 어긋나는 바람에 다른 방식으로 입력 받았다.
C언어로는 아이디어가 바로 떠올랐는데, Python에서는 리스트에 인덱스 값에 접근하는 법을 잘 몰라서 시간이 오래 걸렸던 것 같다.
그래서 C언어로도 구현해봤다!
#include <stdio.h>
#include <stdlib.h>
int main() {
int N, M, temp, sum = 0;
scanf("%d %d", &N, &M);
int* list_num = malloc(sizeof(int) * N); // 카드 개수 N 만큼 할당
for (int i = 0; i < N; i++)
scanf_s("%d", &list_num[i]);
// Burte Force 시작
for (int i = 0; i < N - 2; i++) {
for (int j = i + 1; j < N - 1; j++) {
for (int k = j + 1; k < N; k++) {
temp = list_num[i] + list_num[j] + list_num[k];
if (temp <= M && temp > sum) {
sum = temp;
}
}
}
}
printf("%d", sum);
free(list_num);
return 0;
}
Author And Source
이 문제에 관하여(BaekJoon 2798), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@gkswn911/BaekJoon-2798저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)