λ¬Έμ
μΉ΄μ§λ Έμμ μ μΌ μΈκΈ° μλ κ²μ λΈλμμ κ·μΉμ μλΉν μ½λ€. μΉ΄λμ ν©μ΄ 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
νμ΄
Nκ°μ μΉ΄λ μ€ Mμ λμ§ μλ μΈ κ°μ ν©μ μ΅λκ°μ ꡬνλ λ¬Έμ
1. λͺ¨λ κ²½μ°μ μλ₯Ό νμΈν΄μΌ νλ―λ‘ array[0] + array[1] + array[2] λΆν° array[n-3] + array[n-2] + array[n-1] κΉμ§ λͺ¨λ νμΈν μ μλλ‘ ν΄μΌ νλ€.
2. array[0] + array[1] + array[2] -> array[0] + array[1] + array[3] -> … -> array[0] + array[1] + array[n-2] -> array[0] + array[1] + array[n-1] -> array[0] + array[2] + array[3] -> … -> array[0] + array[2] + array[n-2] -> array[0] + array[2] + array[n-1] -> … -> array[n-3] + array[n-2] + array[n-1] μμΌλ‘ νμνλ€.
3. μΈ μ«μμ ν©μ ꡬν λλ§λ€ μΈκ°μ ν©μ΄ maxλ³΄λ€ ν°μ§, mμ λμ§ μλμ§ νμΈνμ¬ μ μ₯νλ€
4. max μΆλ ₯
import java.io.*;
import java.util.StringTokenizer;
public class B2798 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int[] array = new int[n];
st = new StringTokenizer(br.readLine());
for(int i = 0; i < n; i++) {
array[i] = Integer.parseInt(st.nextToken());
}
int max = 0;
for(int i = 0; i < n; i ++) {
for(int j = i+1; j < n; j++) {
for(int k = j+1; k < n; k++) {
int a = array[i]+array[j]+array[k];
max = a <= m && a > max ? a : max;
}
}
}
System.out.println(max);
}
}