-
[KOITP] 풍선자료구조 및 알고리즘/문제풀이 2017. 1. 17. 08:10
출 처 : http://koitp.org/problem/SDS_PRO_6_4/read/
시간 제한 메모리 제한 제출 횟수 정답 횟수 (비율) 정답자 수 1.0 초 512 MB 1644 385 (23%) 343 < Comment >
문제자체는 그다지 어렵지 않았는데, 그리디 알고리즘에 대해서 생각하는 경우는 별로 없다보니 시간이 걸린 것 같습니다, 기본 아이디어는 맨 앞의 풍선을 터트리기 위해서는 반드시 화살을 쏴야만 하므로, 맨앞에서부터 차례대로 현재 위치의 화살을 추가해 주는 것입니다. 그리고 화살이 현재 풍선의 높이에 있다면, 이를 터트린 후, 1 만큼 낮은 높이의 화살을 추가하고, 만약 없다면 화살을 추가해 줍니다. 이 아이디어를 기본으로 하여 앞에서부터 풀면 됩니다.
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.StringTokenizer; public class Balloon { public static int N = 0; public static int INF = Integer.MAX_VALUE; public static int H[] = null; public static int Hcount[] = null; public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); N = Integer.parseInt(br.readLine()); H = new int[N + 1]; int maxHeight = 0; StringTokenizer st = new StringTokenizer(br.readLine()); for (int i = 1 ; i <= N ; i++) { H[i] = Integer.parseInt(st.nextToken()); maxHeight = Math.max(maxHeight, H[i]); } Hcount = new int[maxHeight + 1]; int answer = 0; for (int i = 1 ; i <= N ; i++) { if(Hcount[H[i]] > 0) { Hcount[H[i]]--; Hcount[H[i] - 1]++; } else { Hcount[H[i] - 1]++; answer++; } } bw.write("" + answer); bw.flush(); bw.close(); } }