728x90
https://www.acmicpc.net/problem/18114
18114번: 블랙 프라이데이
첫 번째 줄에 물건의 개수 N과 제시하는 무게 C가 공백으로 구분되어 주어진다. (1 ≤ N ≤ 5,000, 1 ≤ C ≤ 108, N과 C는 양의 정수) 다음 줄에는 N개의 물건 각각의 무게 w가 공백으로 구분되어 주어진
www.acmicpc.net
728x90
메모리: 113,008 KB , 시간: 276 ms
사용 알고리즘: 브루트포스 알고리즘
내 생각
수의 중복이 없고 메모리 제한이 넉넉해서 boolean
배열을 만들어 인덱스에 해당하는 값이 있는지 체크해두고 2중 for
문으로 해결했다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int C = Integer.parseInt(st.nextToken());
int[] W = new int[N];
boolean[] exist = new boolean[100_000_001]; // 인덱스에 해당하는 무게의 물건이 있으면 true
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
W[i] = Integer.parseInt(st.nextToken());
exist[W[i]] = true;
}
int idx;
for (int i = 0; i < N; i++) {
// W[i] 하나만으로 C를 만들 수 있는 경우
if(W[i] == C) {
System.out.println(1);
return;
}
for (int j = i + 1; j < N; j++) {
// W[i]와 W[j]만으로 C를 만들 수 있는 경우
if(W[i] + W[j] == C) {
System.out.println(1);
return;
}
// C - W[i] - W[j]인 수가 존재하며, 이 수가 W[i]나 W[j]가 아닌 경우
// 이 세 수로 C를 만들 수 있음
idx = C - (W[i] + W[j]);
if(idx < 1) continue;
// 조합을 찾은 경우
if(idx != W[i] && idx != W[j] && exist[idx]) {
System.out.println(1);
return;
}
}
}
// 조합을 찾지 못한 경우
System.out.println(0);
}
}
728x90
'Problem Solving > BOJ' 카테고리의 다른 글
[백준, BOJ 18866] 젊은 날의 생이여 (java) (0) | 2024.02.04 |
---|---|
[백준, BOJ 4386] 별자리 만들기 (java) (0) | 2024.02.04 |
[백준, BOJ 19542] 전단지 돌리기 (java) (1) | 2024.01.24 |
[백준, BOJ 1916] 최소비용 구하기 (java) (1) | 2024.01.24 |
[백준, BOJ 20159] 동작 그만. 밑장 빼기냐? (java) (1) | 2024.01.24 |