๋ฌธ์
๋ฌธ์ ๋งํฌ https://www.acmicpc.net/problem/2798
- N์ฅ์ ์นด๋์ ์จ์ ธ ์๋ ์ซ์๊ฐ ์ฃผ์ด์ก์ ๋, M์ ๋์ง ์์ผ๋ฉด์ M์ ์ต๋ํ ๊ฐ๊น์ด ์นด๋ 3์ฅ์ ํฉ์ ๊ตฌํด ์ถ๋ ฅํ์์ค.
- ์ฒซ์งธ ์ค์ ์นด๋์ ๊ฐ์ N(3 ≤ N ≤ 100)๊ณผ M(10 ≤ M ≤ 300,000)์ด ์ฃผ์ด์ง๋ค.
- ๋์งธ ์ค์๋ ์นด๋์ ์ฐ์ฌ ์๋ ์๊ฐ ์ฃผ์ด์ง๋ฉฐ, ์ด ๊ฐ์ 100,000์ ๋์ง ์๋ ์์ ์ ์์ด๋ค.
- ํฉ์ด M์ ๋์ง ์๋ ์นด๋ 3์ฅ์ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ๋ง ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค.
- ์ฒซ์งธ ์ค์ M์ ๋์ง ์์ผ๋ฉด์ M์ ์ต๋ํ ๊ฐ๊น์ด ์นด๋ 3์ฅ์ ํฉ์ ์ถ๋ ฅํ๋ค.
์์ด๋์ด
- ์นด๋ ์ธ์ฅ์ ํฉ์ ๊ตฌํ์ ๋, ๋ฐฐ์ด์ ์ ์ฅํ๋๋ฐ, ๊ทธ ํฉ์ด ๊ฒน์น ์๋ ์์ผ๋ ์ค๋ณต ์ซ์๊ฐ ๋ค์ด๊ฐ์ง ์๋ set์ ํ์ฉํด์ผ๊ฒ ๋ค๊ณ ์๊ฐํ๋ค.
- ์นด๋ ์ธ์ฅ์ ์กฐํฉ์ ์ฌ๊ท๋ก ๊ตฌํ๋ฉด ๋๊ฒ ๋ค๊ณ ์๊ฐ์ ํ์๋ค.
๊ฒช์ ์ํ์ฐฉ์ค
- ์ผ๋จ... ์ฌ๊ท๊ฐ ๋๋ฌด ์ค๋๋ง์ด๋ผ... ๋ฐฉ๋ฒ์ด ์๊ฐ์ด ์๋์ ๋ง์ด ํค๋งธ๋ ๊ฒ ๊ฐ๋ค. ์ด๋ฒ ๊ธฐํ์ ์ ๋๋ก ๋ค์ ์์ง๋ฅผ ํด์ผ๊ฒ ๋ค...
- ๊ทธ๋ฆฌ๊ณ ๋ ์ค๋๊ฑธ๋ฆฐ ์ด์ ๊ฐ ์๋ค.. ๋ฌธ์ ๋ฅผ ๋ ์ ๋๋ก ์์ฝ๊ณ ํ์๋ค...๋ถ๋ช ์ธ์ฅ์ ํฉ์ด M๋ณด๋ค ์์์ผ๋๋ค๊ณ ๋ฌธ์ ์ ์ ํ์๋๋ฐ... ๊ทธ๊ฑธ ๋ฌด์ํ๊ณ Math.abs(M - ์ธ์ฅ์ ์นด๋ ํฉ) ์ด๋ฐ์์ผ๋ก ํ์์๋ค...์ฌ์ด๋ฌธ์ ์ง๋ง ์ ๋ง ์ค๋๊ฑธ๋ฆฐ ๋ฌธ์ ์๋ค...ใ ใ
- ๊ทธ๋ฆฌ๊ณ ์ด์ ๋ณด๋๊น ๊ตณ์ด ๋ฐฐ์ด์ ์ ์ฅ์ํ๊ณ ์ฌ๊ท ๋๋ ค์ ์นด๋ 3๊ฐ์ ํฉ์ ๊ตฌํ ๋๋ง๋ค ์ต์๊ฐ์ด๋ ๋น๊ตํด์ ๊ฐฑ์ ํ์ผ๋ฉด ์๋๊ฐ ๋ ๋นจ๋์ํ ๋ฐ...๋ผ๋ ์๊ฐ์ด ๋ ๋ค.. ๋ค์๋ถํฐ๋ ์ฐธ๊ณ ํด์ ๋ฌธ์ ๋ฅผ ํ์ด์ผ๊ฒ ๋ค...
์ฝ๋
import java.io.*;
import java.lang.reflect.Array;
import java.util.*;
public class BOJ2798 {
// ์นด๋ ํฉ์ด ์ค๋ณต๋ ์ ์์ผ๋ฏ๋ก ์ค๋ณต๊ฐ์ด ๋ค์ด๊ฐ์ง ์๋ set์ ์ฌ์ฉ
static Set<Integer> cards_sum = new HashSet<>();
static int cards_num[];
static int N;
static int arr[] = new int[3];
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
// ์นด๋์ ๊ฐ์
N = Integer.parseInt(st.nextToken());
// ๋ง๋ค์ด์ผ๋๋ ์ต๋ํ ๊ฐ๊น์ด ์
int M = Integer.parseInt(st.nextToken());
// ๊ฒฐ๊ณผ๊ฐ
int result = 0;
// ์นด๋ ์ซ์ ์ ์ฅํ ๋ฐฐ์ด
cards_num = new int[N];
StringTokenizer st2 = new StringTokenizer(br.readLine());
for(int i = 0; i < N; i++){
int c = Integer.parseInt(st2.nextToken());
// ์นด๋ ๋ฒํธ ์ ์ฅ
cards_num[i] = c;
}
cards(0, 0);
// ์ฐจ์ด ์ต์๊ฐ์ ์ฐพ๊ธฐ ์ํ ๋ณ์
int min = Integer.MAX_VALUE;
// set์๋ ์์๊ฐ ์์ผ๋ฏ๋ก ๋ค์ ๋ฐฐ์ด๋ก ์ ํ
int sumArr[] = new int[cards_sum.size()];
int idx = 0;
// ๋ฐฐ์ด๋ก ์ ํ
for(int i : cards_sum){
sumArr[idx] = i;
idx = idx + 1;
}
// ์กฐํฉํ์ฌ ํฉ์ ๊ตฌํ ์นด๋ ๊ฐ ๋ฐฐ์ด์์ ๊ฐ์ฅ ๊ทผ์ ํ ๊ฐ ์ฐพ๊ธฐ ์ํด ๋ฐ๋ณต
for(int i = 0; i < sumArr.length; i++){
// M์ ๋์ง ์์์ผ ํ๋ฏ๋ก
if(M >= sumArr[i]){
if(min > (M - sumArr[i])){
result = sumArr[i];
min = M - sumArr[i];
}
}
}
System.out.println(result);
}
public static void cards(int n, int m){
// ์นด๋ ์ธ๊ฐ๊ฐ ์กฐํฉ์ด ๋์ ๊ฒฝ์ฐ,
if(n == 3){
// ํด๋น ์นด๋ 3๊ฐ์ ์ซ์๋ฅผ ๋ํจ
cards_sum.add(arr[0] + arr[1] + arr[2]);
}
else{
// ์ค๋ณต๋ ๊ฐ์ด ๋ค์ด๊ฐ์ง ์๊ธฐ ์ํด i = m
for(int i = m; i < N; i++){
// ์นด๋ 3๊ฐ๋ฅผ ์กฐํฉํ๋ ๋ฐฐ์ด์ ์นด๋ ํ๊ฐ๋ฅผ ๋ฃ์
arr[n] = cards_num[i];
// ํ๊ฐ๊ฐ ๋ค์ด๊ฐ์ผ๋ฏ๋ก ๊น์ด + 1
n = n + 1;
// ์ ํํ ๋ค์์นด๋๋ถํฐ ์กฐํฉ์ ์ฌ์ฉํ๊ธฐ ์ํด์ + 1
// ๋ค์ ์นด๋ ์กฐํฉํ๋ฌ๊ฐ
cards(n, i + 1);
// ๋ค๋ฅธ ์นด๋๋ ์กฐํฉํ๊ธฐ ์ํด์ ๊น์ด ์ด๊ธฐํ
n = n - 1;
}
}
}
}
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] BOJ 1259 ํฐ๋ฆฐ๋๋กฌ์ (0) | 2024.07.11 |
---|---|
[Java] BOJ 15829 Hashing (2) | 2024.07.11 |
[Java] BOJ 2292 ๋ฒ์ง (0) | 2024.07.10 |
[Java] BOJ 2231 ๋ถํดํฉ (0) | 2024.07.10 |
[Java] BOJ 1978 ์์ ์ฐพ๊ธฐ (0) | 2024.07.09 |