[Baekjoon/λ°±μ€][2798][C/C++] λΈλμ
γλͺ©μ°¨γ
0. κ°μ
1. λ¬Έμ
2. νμ΄
3. μ½λ
0. κ°μ
λΈλ£¨νΈν¬μ€ μκ³ λ¦¬μ¦μΌλ‘ νΈλ λ¬Έμ μ΄λ€. λͺ¨λ κ²½μ°μ μλ₯Ό λ°μ§λ©΄ λ΅μ΄ λμΆλλ€.
1. λ¬Έμ
https://www.acmicpc.net/problem/2798
[λ¬Έμ ]
μΉ΄μ§λ Έμμ μ μΌ μΈκΈ° μλ κ²μ λΈλμμ κ·μΉμ μλΉν μ½λ€. μΉ΄λμ ν©μ΄ 21μ λμ§ μλ νλ λ΄μμ, μΉ΄λμ ν©μ μ΅λν ν¬κ² λ§λλ κ²μμ΄λ€. λΈλμμ μΉ΄μ§λ Έλ§λ€ λ€μν κ·μ μ΄ μλ€.
νκ΅ μ΅κ³ μ λΈλμ κ³ μ κΉμ μΈμ μλ‘μ΄ λΈλμ κ·μΉμ λ§λ€μ΄ μκ·Ό, μ°½μμ΄μ κ²μνλ €κ³ νλ€.
κΉμ μΈ λ²μ μ λΈλμμμ κ° μΉ΄λμλ μμ μ μκ° μ°μ¬ μλ€. κ·Έ λ€μ, λλ¬λ Nμ₯μ μΉ΄λλ₯Ό λͺ¨λ μ«μκ° λ³΄μ΄λλ‘ λ°λ₯μ λλλ€. κ·Έλ° νμ λλ¬λ μ«μ Mμ ν¬κ² μΈμΉλ€.
μ΄μ νλ μ΄μ΄λ μ νλ μκ° μμ Nμ₯μ μΉ΄λ μ€μμ 3μ₯μ μΉ΄λλ₯Ό 골λΌμΌ νλ€. λΈλμ λ³ν κ²μμ΄κΈ° λλ¬Έμ, νλ μ΄μ΄κ° κ³ λ₯Έ μΉ΄λμ ν©μ Mμ λμ§ μμΌλ©΄μ Mκ³Ό μ΅λν κ°κΉκ² λ§λ€μ΄μΌ νλ€.
Nμ₯μ μΉ΄λμ μ¨μ Έ μλ μ«μκ° μ£Όμ΄μ‘μ λ, Mμ λμ§ μμΌλ©΄μ Mμ μ΅λν κ°κΉμ΄ μΉ΄λ 3μ₯μ ν©μ κ΅¬ν΄ μΆλ ₯νμμ€.
[μ λ ₯]
첫째 μ€μ μΉ΄λμ κ°μ N(3 ≤ N ≤ 100)κ³Ό M(10 ≤ M ≤ 300,000)μ΄ μ£Όμ΄μ§λ€. λμ§Έ μ€μλ μΉ΄λμ μ°μ¬ μλ μκ° μ£Όμ΄μ§λ©°, μ΄ κ°μ 100,000μ λμ§ μλ μμ μ μμ΄λ€.
ν©μ΄ Mμ λμ§ μλ μΉ΄λ 3μ₯μ μ°Ύμ μ μλ κ²½μ°λ§ μ λ ₯μΌλ‘ μ£Όμ΄μ§λ€.
[μΆλ ₯]
첫째 μ€μ Mμ λμ§ μμΌλ©΄μ Mμ μ΅λν κ°κΉμ΄ μΉ΄λ 3μ₯μ ν©μ μΆλ ₯νλ€.
[μμ μ λ ₯ 1]
5 21
5 6 7 8 9
[μμ μΆλ ₯ 1]
21
[μμ μ λ ₯ 2]
10 500
93 181 245 214 315 36 185 138 216 295
[μμ μΆλ ₯ 2]
497
2. νμ΄
Mμ λμ§ μμΌλ©΄μ Mμ μ΅λν κ°κΉμ΄ μΉ΄λ 3μ₯μ ꡬνκΈ° μν΄μλ, 3μ€ forλ¬Έμ΄ νμνλ€. μ΄λ, 3μ€ forλ¬Έμ μ리λ μλ κ·Έλ¦Όκ³Ό κ°λ€.
κ°κ°μ forλ¬Έ λ΄μμ λ°λ³΅λ³μμ λ²μλ₯Ό μ μ΄ν΄λ³΄μ. μ κ·Έλ¦Όκ³Ό κ°μ΄ λ³μμ κ°μ΄ μ μ§μ μΌλ‘ μ¦κ°ν΄ κ°λ€λ μ¬μ€μ μ μ μλ€.
μ΄ν, continueμ MAX ν¨μλ₯Ό μ΄μ©ν΄ Mμ λμ§ μμΌλ©΄μ Mμ μ΅λν κ°κΉμ΄ μΉ΄λ 3μ₯μ ν©μ μΆλ ₯νλ©΄ λλ€.
3. μ½λ
#pragma warning (disable:4996)
#include <stdio.h>
#include <stdlib.h>
#define max(a, b) (((a) > (b)) ? (a) : (b))
int main(int argc, char* argv[]) {
/* μ
λ ₯ */
int N, M; scanf("%d %d", &N, &M);
int* arr = (int*)calloc(N, sizeof(int));
for (int i = 0; i < N; i++)
scanf("%d", &arr[i]);
/* μ΅λν κ°κΉμ΄ μΉ΄λ 3μ₯ μ°ΎκΈ° */
int max_num = 0;
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++) {
/* ν©μ΄ Mμ λμ κ²½μ° */
if (arr[i] + arr[j] + arr[k] > M)
continue;
max_num = max(max_num, arr[i] + arr[j] + arr[k]);
}
}
}
/* μΆλ ₯ */
printf("%d", max_num);
/* λ§λ¬΄λ¦¬ */
free(arr);
return 0;
}