Baekjoon

Baekjoon 2798번 블랙잭

ppwag 2020. 7. 26. 12:39

문제

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

걸린 시간

01 : 16 : 17

풀이

Python3

if __name__ == "__main__":
    N, M = map(int, input().split())    
    num = list(map(int, input().split()))
    result = []
    max_i = len(num)-2 # max index
    for fi in range(0, max_i):
        second_i= 0 # second index
        first = num[fi]
        for se in range(0, max_i-fi):
            second = num[fi+1+se]
            for th in range(second_i, max_i-fi):
                third = num[fi+2+th]
                total = first + second + third
                if total <= M:
                    result.append(total)
            second_i += 1
    print(max(result))

3중 for문 사용이 필요한 경우엔 두번째 for 문이 최소 2번 이상 진행된 과정을 그려보고 구현하자.

C++

#include <bits/stdc++.h>
#define INF 987654321
using namespace std;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    int n, m;
    cin >> n >> m;
    vector<int> card;
    int tmp;
    for(int i = 0; i < n; i++){
        cin >> tmp;
        card.push_back(tmp);
    }
    vector<int> ans;
    int f, s, t; // first, second, third
    for(int i = 0; i < n-2; i++){
        f = card[i];
        for(int j = i+1; j < n-1; j++){
            s = card[j];
            for(int k = j+1; k < n; k++){
                t = card[k];
                tmp = f+s+t;
                if(tmp <= m)
                    ans.push_back(tmp);
            }
        }
    }
    cout << *max_element(ans.begin(), ans.end()) << "\n";
    return 0;
}

Python 코드가 너무 지저분한 것 같아 C++ 로 다시 풀었다.

'Baekjoon' 카테고리의 다른 글

Baekjoon 10989번 수 정렬하기 3  (0) 2020.07.26
Baekjoon 10866번 덱  (0) 2020.07.26
Baekjoon 10250번 ACM 호텔  (0) 2020.07.26
Baekjoon 2839번 설탕 배달  (0) 2020.07.26
Baekjoon 1259번 팰린드롬수  (0) 2020.07.26

댓글