너무 한번에 해결할려고 하니까 로직도 꼬이고 복잡해짐, 그냥 차근차근 갯수 구하면 되는 문제였음. 완탐으로 가능한 거 같으면 최적화를 너무 생각하지 말고 일단 완탐답게 구현하자
걸린시간 1시간 난이도 4/10
/* Set 자료구조 이용해서 하나씩 차근차근 확인하기
1개일 때 -> 그냥 확인
2개일 때 -> 완탐으로 확인
3개일 때 -> 완탐 돌리면서 총 금액 - 2개 합을 뽑을 수
있는지 확인하기
/*
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.StringTokenizer;
public class BlackFriday {
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 c = Integer.parseInt(st.nextToken());
int[] arr = new int[n];
HashSet<Integer> hs = new HashSet<>();
st = new StringTokenizer(br.readLine());
//1개로 가능한지 확인
for (int i = 0; i < n; i++) {
int cur = Integer.parseInt(st.nextToken());
arr[i] = cur;
hs.add(cur);
if (cur == c) {
System.out.println(1);
return;
}
}
//2개로 가능한지 확인
for (int i = 0; i < n; i++) {
int remain = c-arr[i];
if (arr[i] == remain) continue;
if (hs.contains(remain)) {
System.out.println(1);
return;
}
}
//3개로 가능한지 확인
for (int i = 0; i < n; i++) {
for (int j = i+1; j < n; j++) {
int remain = c-(arr[i]+arr[j]);
//같은 무게는 들어있지 않으니까
if (remain == arr[i] || remain == arr[j]) continue;
if (hs.contains(remain)) {
System.out.println(1);
return;
}
}
}
System.out.println(0);
}
}