백준 18114 블랙 프라이데이 (Gold 5)

Wonkyun Jung·2023년 5월 16일
0

알고리즘

목록 보기
53/59
post-thumbnail

너무 한번에 해결할려고 하니까 로직도 꼬이고 복잡해짐, 그냥 차근차근 갯수 구하면 되는 문제였음. 완탐으로 가능한 거 같으면 최적화를 너무 생각하지 말고 일단 완탐답게 구현하자
걸린시간 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);
    }
}



0개의 댓글