그리디 7

백준 1092(JAVA)

문제 지민이는 항구에서 일한다. 그리고 화물을 배에 실어야 한다. 모든 화물은 박스에 안에 넣어져 있다. 항구에는 크레인이 N대 있고, 1분에 박스를 하나씩 배에 실을 수 있다. 모든 크레인은 동시에 움직인다. 각 크레인은 무게 제한이 있다. 이 무게 제한보다 무거운 박스는 크레인으로 움직일 수 없다. 모든 박스를 배로 옮기는데 드는 시간의 최솟값을 구하는 프로그램을 작성하시오. 풀이 어려운 문제이다. 이 문제의 중요한점은 박스의 무게에 집착하면 안되고 크레인이 들수 있는 박스의 개수에 집중해야한다. 6 8 9 크레인 2 2 4 5 7 박스 (둘다 오름차순 정렬한 상태임) 첫번째 6 크레인은 박스 4개를 들수있다.(2 2 4 5) 두번째 8 크레인은 박스 5개를 들수있다.(2 2 4 5 7) 세번째 9 ..

algorithm 2021.08.03

백준 2012(JAVA)

문제 2007년 KOI에 N명의 학생들이 참가하였다. 경시일 전날인 예비소집일에, 모든 학생들은 자신이 N명 중에서 몇 등을 할 것인지 예상 등수를 적어서 제출하도록 하였다. KOI 담당조교로 참가한 김진영 조교는 실수로 모든 학생의 프로그램을 날려 버렸다. 1등부터 N등까지 동석차 없이 등수를 매겨야 하는 김 조교는, 어쩔 수 없이 각 사람이 제출한 예상 등수를 바탕으로 임의로 등수를 매기기로 했다. 자신의 등수를 A등으로 예상하였는데 실제 등수가 B등이 될 경우, 이 사람의 불만도는 A와 B의 차이 (|A - B|)로 수치화할 수 있다. 당신은 N명의 사람들의 불만도의 총 합을 최소로 하면서, 학생들의 등수를 매기려고 한다. 각 사람의 예상 등수가 주어졌을 때, 김 조교를 도와 이러한 불만도의 합을 ..

algorithm 2021.07.22

백준 2212(JAVA)

문제 (너무 긴관계로 핵심만 딱 설명하겠다.) 직선위에 센서가 여러개 있다. 센서의 좌표는 정수로 입력되어진다.(일직선 위에 센서가 있는 것이다.) 센서의 개수는 N개이다. 해당 센서를 수신해야하는 집중국 K개를 세워야한다. 집중국들은 모든 센서를 수신하는 위치에 위치하여야한다. 여기서 문제!! 집중국이 센서로부터 수신 가능 영역의 길이합의 최소를 구하라 문제가 너무 난해하다 예제로 설명하겠다. 센서의 위치를 나타내는 정수 1 6 9 3 6 7 이를 오름차순 정렬하면 1 3 6 6 7 9 이중 집중국 2개를 설치해야하는데 센서 수신가능영역의 합을 최소로하라! (1 3)을 수신하는 센서 1개 -> 영역의 길이 2 (6 9)를 수신하는 센서 1개 -> 영역의 길이 3 합 : 5 풀이 일단 오름차순한다음 적당..

algorithm 2021.07.21

백준 13904(JAVA)

문제 웅찬이는 과제가 많다. 하루에 한 과제를 끝낼 수 있는데, 과제마다 마감일이 있으므로 모든 과제를 끝내지 못할 수도 있다. 과제마다 끝냈을 때 얻을 수 있는 점수가 있는데, 마감일이 지난 과제는 점수를 받을 수 없다. 웅찬이는 가장 점수를 많이 받을 수 있도록 과제를 수행하고 싶다. 웅찬이를 도와 얻을 수 있는 점수의 최댓값을 구하시오. 풀이 매일 하루에 하나씩밖에 과제를 하지못한다. 1 20 2 50 3 30 4 40 4 60 4 10 이런 입력이있으면 어떻게 해야 최대 점수를 받을수 있을까? 요소되는 날짜는 총 4일인데 해야할과제는 6개다. 즉, 2개를 버려야한다. 뭘 2개버려야할까? 바로 바로!!!! 점수가 제일 적은 과제 두개를 버려야한다 그럼 언제버려야할까? 언제버려야할지는 ArrayLis..

algorithm 2021.07.20

백준 14469(JAVA)

문제 소가 입장하는 시간을 최소로 하라! 풀이 소가 도착하는 시간을 기준으로 정렬 -> 같으면 소가 대기하는 시간을 기준으로 정렬을 한다. 그다음 걸리는 시간을 계산하면 소가 대기하는 시간을 최소, 즉 버리는 시간을 최소로 할수있다. 코드 package baekjoon.그리디; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; class Cow{ int arrive; int time; public Cow(int arrive, int time){ this.arrive = arrive; this.time = time; } public int getArrive..

algorithm 2021.07.17

백준 9009(JAVA)

문제 입력되는 수에 대해서 최소의 개수의 피보나치의 합이 어떠한 수가 되는 피보나치 수들을 구하여라 풀이 문제를 보자마자 든 생각은 일단 dp테이블에 피보나치의 결과를 메모이제이션 해야겠단 생각이 들었다. 피보나치의 합을 구하는데 피보나치의 개수가 최소의 개수가 되야하므로 입력되는 정수 num에 가장 근접한(같거나 작은) 피보나치의 결과를 num에서 빼나가면 되겠단 생각이들었다. 어떠한 수는 피보나치 하나의 값이거나 여러개의 합으로 구성될수 있으므로 어떠한 수가 입력되던간에 정답은 나온다. 입력되는 수에 가장 근접한 수를 빼나가면 최소의 개수의 피보나치일것이다. 즉, 그리디알고리즘이다. 코드 package baekjoon.그리디; import java.io.*; import java.util.ArrayL..

algorithm 2021.07.14