알고리즘
백준 알고리즘 그리디
double_R_one_G
2020. 10. 19. 18:18
728x90
11047. 동전 0
그리디의 기초문제.
import java.util.Arrays;
import java.util.Scanner;
class main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int money=sc.nextInt();
int arr[]=new int[n];
int mok=0,nam=0;
int sum=0;
for(int i=0;i<n;i++) {
int x=sc.nextInt();
arr[i]=x;
}
Arrays.sort(arr);
for(int i=n-1;i>=0;i--){
if(money>=arr[i]) {
mok=money/arr[i];
nam=money%arr[i];
money=nam;
sum=sum+mok;
}
} System.out.println(sum);
}}
1931. 회의실 배정
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
class main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int arr[][]=new int [n][2];
int count=0;
int end=-1;
for(int i=0;i<n;i++) {
arr[i][0]=sc.nextInt();
arr[i][1]=sc.nextInt();
}
Arrays.sort(arr, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if(o1[1]==o2[1]) { //[x][y] y(1)인덱스 값 비교
return Integer.compare(o1[0],o2[0]); //같다면 x(0) 비교
}
return Integer.compare(o1[1],o2[1]) ;
}
});
for(int i=0;i<n;i++) {
if(arr[i][0]>=end) { // 시작이 엔드보다 크다면 다음거 가능
end=arr[i][1];
count++;
}
}
System.out.println(count);
}}
2차원 배열 정렬에서 오래걸림..
배우게 된 코드!
2차원 배열 ex. arr[x][2] -> arr[][2] 기준으로 정렬 ->첫번째 실행 ->그 다음 arr[x][0] 의 값이 전의 end보다 작다면 패스
--------------------------------------2020/10/20------------------------------------
11399. ATM
import java.util.Arrays;
import java.util.Scanner;
class main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int arr[]=new int [n];
int time=0;
int totaltime=0;
for(int i=0;i<n;i++) {
int s=sc.nextInt();
arr[i]=s;
}
Arrays.sort(arr);
for(int i=0;i<n;i++) {
time=time+arr[i];
totaltime=totaltime+time;
}
System.out.println(totaltime);
}}
생각보다 어렵지 않았던 문제! 정렬후 각 시간에 대한 값 더해주면 됨
728x90