목록그리디 (15)
Dev.baelanche
#include #include #include using namespace std; pair a[200000]; priority_queue pq; bool compare(pair a, pair b) { if (a.first > n; for (int i = 0; i > a[i].first >> a[i].second; sort(a, a + n, compare); for (int i = 0; i < n; i++) { int end = a[i].second; if (!pq.empty() &..
이전에 자바로 푼적이 있어서 코드만 적어놓겠다. compare 함수를 처음 구현해봐서 저장하는게 목적이다. #include #include using namespace std; pair a[100000]; bool compare(pair a, pair b) { if (a.second > n; for (int i = 0; i > a[i].first >> a[i].second; sort(a, a + n, compare); for (int i = 0; i ..
1. 패널티가 가장 적게하기 위해서는 문제를 푸는데 걸리는 시간이 적은 문제부터 해결해야 한다. -> 걸리는 시간 기준 오름차순으로 정렬한다. 2. 문제에 써있는대로 패널티를 합산한다. (시그마를 썼으므로 누적해서 계속 더하면 된다.) 3. T + 20V의 패널티를 추가로 더한다. #include #include using namespace std; pair a[11]; int main() { for (int i = 0; i > a[i].first >> a[i].second; sort(a, a + 11); int pen = 0, pre = 0; for (int i = 0; i < 11; i++) { pen += pre + a[i].first; pre += a[i].first;..
그리디 알고리즘 입문급 문제이다. 최솟값을 구해야 하므로 버튼 값이 큰것부터 우선으로 누른다. public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a = 0; int b = 0; int c = 0; int t = sc.nextInt(); while(t >= 10) { if(t >= 300) { t -= 300; a++; } else if(t >= 60) { t -= 60; b++; } else if(t >= 10) { t -= 10; c++; } } System.out.println(t == 0 ? a + " " + b + " " + c : -1); } }
감이 안와서 질문게시판을 참고했다. 1. 행렬 A, B 를 비교한 정보를 담은 배열 C를 만든다. (일치하면 false, 불일치하면 true 로 진행했다.) 2. 0, 0 부터 n-3, m-3 까지 3*3 크기로 탐색한다. - 탐색이 끝났을때 C의 각 배열 정보가 모두 일치해야 문제의 조건을 만족한다. 2-1. 탐색할때 첫번째 인덱스가 false(일치)라면 원소 값을 뒤집을 필요 없다. 글로만 쓰자니 힘들어서 주석을 달아놓았다. public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); Buff..
-부호가 나오면 다음 -부호가 나올때까지 괄호를 다 치면 된다. 따라서 한번이라도 -부호가 나오면 그 뒤로는 전부 빼기를 하면 최솟값을 구할 수 있다. public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); String s = "+" + br.readLine(); char c[] = s.toCharArray(); int sum = 0; String temp ..
기타줄 6개 짜리 우선 구입 > 6개 짜리의 개수를 줄임 > 낱개 구입 순으로 각 케이스마다 돈의 최솟값을 그리디하게 찾아야 한다. 예를 들면, n = 13, m = 1 6개 패키지 = 100 낱개 = 10 일때, 패키지 2개 + 낱개 1개 = 210 패키지 1개 + 낱개 7개 = 170 패키지 0개 + 낱개 13개 = 130 순으로 진행하며 매번 최솟값을 갱신한다. 구입할 수 있는 브랜드가 여러개일때는 6개 패키지와 낱개 를 각각 다른 브랜드에서 구입할 수 있으므로 완전탐색으로 해결했다. public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new ..
선택한 사원의 서류 점수, 면접 점수의 순위가 모두 다른 지원자의 서류 점수, 면접 점수의 순위보다 밀리지만 않으면 채용된다. 완전탐색으로 구현하면 시간초과가 나므로 두 점수 순위 중 하나로 정렬한 후 나머지 한 순위만 비교해주면 된다. 구조체, 클래스로 점수를 묶어서 정렬해도 되고 배열의 인덱스로 정렬해도 된다. 필자는 입력받을때 정렬된 상태로 받았다. public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new Out..