문제
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 |
댓글