<Algorithm> 143. 계란으로 계란치기(BJO)
by BFine반응형
1. 16987번 계란으로 계란치기(BJO)
백트래킹 문제
이문제는 기본 백트래킹 문제지만 꼼꼼한 처리가 필요했다.
이미 쥔 달걀이 깨진 경우에 return을 안걸어서 문제가 잇었고 또 이미 다 깨진 경우에 대한 처리를 안해서 92 퍼센트에서 계속 틀렸다.
처리해야 될 부분을 따로 적어놓고 확실하게 처리해주어야 겠다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | import java.util.Scanner; public class Main { static int n; static int[] dur; static int[] wei; public static void main(String[] args) { Scanner sc = new Scanner(System.in); n = sc.nextInt(); dur = new int[n]; wei = new int[n]; /****************************** * 백트래킹을 이용해서 모든 경우를 구한다. * 이때 이미 깨진 경우와 쥔거 뺴고 다깨져 있는 * 경우를 처리해서 깨진 계란의 최대값을 * 구한다. *******************************/ for(int i = 0; i < n; i++) { dur[i] = sc.nextInt(); wei[i] = sc.nextInt(); } solve(0); System.out.println(max); } static int max = 0; static int egg = 0; public static void solve(int hold) { if(hold == n) { max = Math.max(max, egg); return; } for(int target = 0; target < n; target++) { if(dur[hold] <= 0 || egg == n-1) { solve(hold+1); return; } if(dur[target] <= 0) continue; if(target == hold) continue; int target_dur = dur[target]; int hold_dur = dur[hold]; int egg_temp = egg; dur[target] -= wei[hold]; dur[hold] -= wei[target]; if(dur[target] <= 0) egg++; if(dur[hold] <= 0) egg++; solve(hold+1); dur[target] = target_dur; dur[hold] = hold_dur; egg = egg_temp; } } } | cs |
참고 & 출처
반응형
'공부(2018~2019) - 스킨변경전 > Algorithm' 카테고리의 다른 글
<Algorithm> 145. 균형점(SWExpert) (0) | 2019.03.29 |
---|---|
<Algorithm> 144. Baaaaaaaaaduk2[Easy](BJO) (0) | 2019.03.27 |
<Algorithm> 142. 인싸들의 가위바위보(BJO) (0) | 2019.03.26 |
<Algorithm> 141. Maaaaaaaaaze(BJO) (0) | 2019.03.25 |
<Algorithm> 140. 배열의 회전 (0) | 2019.03.25 |
블로그의 정보
57개월 BackEnd
BFine