문제
https://www.acmicpc.net/problem/2798
소스코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int card[100];
int N, M;
int solution() {
int answer = 0;
for (int x = 0; x < N; x++) {
if (card[x] > M) continue;
for (int y = x + 1; y < N; y++) {
if (card[x] + card[y] > M) continue;
for (int z = y + 1; z < N; z++) {
if (card[x] + card[y] + card[z] > M) continue;
else if (card[x] + card[y] + card[z] > answer) {
answer = card[x] + card[y] + card[z];
}
}
}
}
return answer;
}
int main(void) {
cin >> N >> M;
for (int i = 0; i < N; i++) {
cin >> card[i];
}
cout << solution();
}
1. 거의 전수 조사.. 조금이라도 빨리 끝내기 위해 x, y, z를 뒤질때마다 M보다 값이 크면 그 값은 건너 뛰도록(continue) 했다.
** continue와 break의 차이! break는 반복문이 끝내고, continue는 반복문의 끝으로 가서 일부 코드를 점프하는것!
2. answer를 0으로 초기화 해둔 다음에 세 개의 값이 더해진것이 answer 초과 M 이하인 경우에 answer 값을 재설정!
'개인 공부 > 코딩테스트' 카테고리의 다른 글
[C++][백준 11047][그리디 알고리즘] 동전 0 :: seoftware (0) | 2020.02.26 |
---|---|
[C++][백준 11399][그리디 알고리즘] ATM :: seoftware (0) | 2020.02.26 |
[C++][백준 2490][구현] 윷놀이 :: seoftware (0) | 2020.02.26 |
[C++][프로그래머스][스택/큐] 주식가격 :: seoftware (0) | 2020.02.26 |
[C++][프로그래머스][스택/큐] 쇠막대기 :: seoftware (0) | 2020.02.26 |
댓글