https://www.acmicpc.net/problem/1049
ํ๋ฆฐ ์ฝ๋
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int N = scan.nextInt(); // ๋์ด์ง ๊ธฐํ์ค์ ๊ฐฏ์
int M = scan.nextInt(); // ๊ธฐํ์ค ๋ธ๋๋
int payMoney = 0; // ์ง๋ถํด์ผ ํ๋ ๋์ ์ต์๊ฐ
int minPackageMoney = 1000; // ๊ฐ ๋ธ๋๋๋ณ ํจํค์ง ๊ฐ๊ฒฉ ์ต์๊ฐ
int minEachOfMoney = 1000; // ๊ฐ ๋ธ๋๋๋ณ ๋ฑ๊ฐ์ ๊ฐ๊ฒฉ ์ต์๊ฐ
int[][] arr = new int[M][2];
int[][] arr2 = arr.clone();
for(int i=0; i<arr.length; i++) {
arr[i][0] = scan.nextInt(); // ๊ฐ ๋ธ๋๋๋ณ ํจํค์ง ๊ฐ๊ฒฉ
arr[i][1] = scan.nextInt(); // ๊ฐ ๋ธ๋๋๋ณ ๋ฑ๊ฐ์ ๊ฐ๊ฒฉ
}
for(int i=0; i<arr.length; i++) {
if(arr[i][0] < minPackageMoney)
minPackageMoney = arr[i][0];
if(arr[i][1] < minEachOfMoney)
minEachOfMoney = arr[i][1];
}
// ํจํค์ง๋ก ์ด ๋๋ณด๋ค ๋ฑ๊ฐ๋ก ์ฌ๋๊ฒ ์ด๋์ธ ๊ฒฝ์ฐ
if(minPackageMoney >= minEachOfMoney * 6) {
payMoney += N * minEachOfMoney;
}
// ๋ฑ๊ฐ๋ก ์ด ๋๋ณด๋ค ํจํค์ง๋ก ์ฌ๋๊ฒ ์ด๋์ธ ๊ฒฝ์ฐ
else {
payMoney += (N/6) * minPackageMoney; // ํจํค์ง ๊ฐ๊ฒฉ์ผ๋ก ๊ตฌ๋งค
N -= (N/6) * 6; // ๋ฑ๊ฐ๋ก ๊ตฌ๋งคํ๊ธฐ ์ํด ํจํค์ง๋ก ๊ตฌ๋งคํ ๊ฐฏ์ ๋นผ๊ธฐ
payMoney += N * minEachOfMoney; // ๋ฑ๋ด์ ๊ฐ๊ฒฉ์ผ๋ก ๊ตฌ๋งค
}
System.out.println(payMoney);
// // ๊ฐ ๋ธ๋๋๋ณ ํจํค์ง ๊ฐ๊ฒฉ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
// Arrays.sort(arr, new Comparator<int[]>() {
// @Override
// public int compare(int[] arr1, int[] arr2) {
// return Integer.compare(arr1[0], arr2[0]);
// }
// });
//
// // ๊ฐ ๋ธ๋๋๋ณ ๋ฑ๊ฐ์ ๊ฐ๊ฒฉ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
// for(int i=0; i<arr2.length; i++)
// Arrays.sort(arr[i]);
//
// // ๋ฑ๊ฐ๋ก ์ด ๋๋ณด๋ค 6๊ฐ ํจํค์ง๋ก ์ด ๋๊ฐ ์ ๋ ดํ ๊ฒฝ์ฐ
// if(arr[0][0] <= arr2[0][0] * 6) {
// money += (N/6) * arr[0][0]; // ํจํค์ง๋ฅผ ๊ตฌ๋งคํด์ผ ํ๋ ๊ฐ๊ฒฉ
// N -= N * (N/6); // ํจํค์ง๋ฅผ ๊ตฌ๋งคํ๊ณ ๋จ์ ๊ฐฏ์
// money += N * arr2[0][0]; // ๋ฑ๊ฐ๋ฅผ ๊ตฌ๋งคํด์ผ ํ๋ ๊ฐ๊ฒฉ
// }
// // 6๊ฐ์ ํจํค์ง ๊ฐ๊ฒฉ๋ณด๋ค ๋ฑ๊ฐ๋ก ์ด ๋๊ฐ ์ ๋ ดํ ๊ฒฝ์ฐ
// else {
// money += N * arr2[0][0];
// }
// System.out.println(money);
scan.close();
}
}
ํ์ด
๋ฌด์จ ์ด์ํ๊ฒ๋ ๋ค ํ์ด๋ณธ ๊ฒ ๊ฐ๋ค..
โ
๊ฐ๋จํ๊ฒ ๋ธ๋๋๋ณ ํจํค์ง, ๋ฑ๊ฐ๋ก ๊ตฌ๋งคํ๋ ๊ฐ๊ฒฉ์ด ์ฃผ์ด์ก์ ๋,,
ํจํค์ง๋ก ๊ตฌ๋งคํ๋๊ฒ ์ ๋ ดํ์ง, ๋ฑ๊ฐ๋ก ๊ตฌ๋งคํ๋๊ฒ ์ ๋ ดํ์ง ๋ ๊ฐ ์์ด์ ๊ตฌ๋งคํ๋๊ฒ ๋ ์ ๋ ดํ์ง ํ๋จํ๋ฉด ๋๋ ๊ฐ๋จํ ๋ฌธ์ ์ธ๋ฐ ..
โ
์ฒ์์(์ฃผ์ ๋ถ๋ถ) ํจํค์ง๋ณ๋ก ์ ๋ ฌํ๊ณ , ๋ฑ๊ฐ๋ณ๋ก ์ ๋ ฌํ๊ณ
ํจํค์ง๋ก ๊ตฌ๋งคํ๋ ๊ฒ ์ ๋ ดํ์ง, ๋ฑ๊ฐ๋ก ๊ตฌ๋งคํ๋๊ฒ ์ ๋ ดํ์ง(6๊ฐ ๊ฐ๊ฒฉ ๋น๊ต) ๋น๊ตํด์ ์ ๋ ดํ๊ฑธ๋ก ์ถ๋ ฅํ๋๋ฐ
ํ๋ ธ์ต๋๋ค ...
โ
๋๋ฒ์งธ๋ก ๊ฐ ํจํค์ง, ๋ฑ๊ฐ ๊ฐ๊ฒฉ์ ์ต์๊ฐ์ ๊ตฌํด์ ๋ค์ ํจํค์ง์ ๋ฑ๊ฐ์ค ๋ญ๋ก ๊ตฌ๋งคํ๋๊ฒ ์ ๋ ดํ ์ง ๋น๊ตํด์ ์ถ๋ ฅํ๋๋ฐ ... ๋ ํ๋ ธ์ต๋๋ค ..
โ
์๊ทธ๋ฐ์ง ๋ชจ๋ฅด๋ค๊ฐ ๋ค๋ฅธ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ๋ ๋ฐ๋ก๊ฐ ์์๋ค...
โ
ํจํค์ง + ๋ฑ๊ฐ๋ฅผ ์์ด์ ๊ตฌ๋งคํ๋ ๊ฒฝ์ฐ์ธ๋ฐ,
๋ง์ฝ ํ์ํ ๊ธฐํ์ค์ ๊ฐ์๊ฐ 23๊ฐ์ด๊ณ ,
๊ฐ์ฅ ์ ๋ ดํ ํจํค์ง(6๊ฐ)์ ๊ฐ๊ฒฉ: 50
๊ฐ์ฅ ์ ๋ ดํ ๋ฑ๊ฐ(1๊ฐ๋น)์ ๊ฐ๊ฒฉ: 20
์ด๋ผ๊ณ ๊ฐ์ ํด๋ณด์..
โ
์ ๊ฒฝ์ฐ ๋ฑ๊ฐ๋ฅผ ์ฌ๋๊ฑฐ๋ณด๋ค ํจํค์ง๋ฅผ ์ฌ๋๊ฒ ๋ ์ ๋ ดํ๋ฐ,
์ธํธ 3๊ฐ๋ฅผ ๊ตฌํ๋ฉด 5๊ฐ์ ๊ธฐํ์ค์ด ๋จ๊ณ ,
์ธํธ 1๊ฐ๋ฅผ ๋ ๊ตฌ๋งคํ ๊ฒฝ์ฐ => 50์
๋ฑ๊ฐ 5๊ฐ๋ฅผ ๊ตฌ๋งคํ ๊ฒฝ์ฐ => 100์,
๋ฐ๋ผ์ ์ธํธ๋ฅผ ๊ตฌ๋งคํ๋๊ฒ ํจ์ฌ ๋ ์ ๋ ดํ๋ค!
โ
๋๋ ์ด๋๊น์ง ์ธํธ๊ฐ ๋ ์ ๋ ดํ ๊ฒฝ์ฐ => ์ธํธ๋ฅผ ๊ตฌ๋งคํ๊ณ ๋๋จธ์ง๋ ํญ์ ๋ฑ๊ฐ๋ก ๊ตฌ๋งคํ์๋ค...
โ
๋ฐ๋ผ์ 3๊ฐ์ง์ ์ผ์ด์ค๋ฅผ ์ ๋ถ ๋น๊ตํด์ ์ต์๊ฐ์ ์ฐพ์ผ๋ฉด ๋๋ค.
1. ์ ๋ถ ํจํค์ง๋ก ๊ตฌ๋งคํ์ ๊ฒฝ์ฐ
2. ์ ๋ถ ๋ฑ๊ฐ๋ก ๊ตฌ๋งคํ์ ๊ฒฝ์ฐ
3. ํจํค์ง + ๋ฑ๊ฐ ์์ด์ ๊ตฌ๋งคํ์ ๊ฒฝ์ฐ
โ
โ
์ต์ข ์ฝ๋
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int N = scan.nextInt(); // ๋์ด์ง ๊ธฐํ์ค์ ๊ฐฏ์
int M = scan.nextInt(); // ๊ธฐํ์ค ๋ธ๋๋
int payMoney = 0; // ์ง๋ถํด์ผ ํ๋ ๋์ ์ต์๊ฐ
int[] pack = new int[M]; // ๊ฐ ๋ธ๋๋๋ณ ํจํค์ง ๊ฐ๊ฒฉ
int[] unit = new int[M]; // ๊ฐ ๋ธ๋๋๋ณ ๋ฑ๊ฐ์ ๊ฐ๊ฒฉ
for(int i=0; i<M; i++) {
pack[i] = scan.nextInt();
unit[i] = scan.nextInt();
}
// ํจํค์ง, ๋ฑ๊ฐ ๊ฐ๊ฒฉ ์ ๋ ฌ
Arrays.sort(pack);
Arrays.sort(unit);
// ๋ฑ๊ฐ๋ก ์ด ๋๋ณด๋ค ํจํค์ง๋ก ์ฌ๋๊ฒ ์ด๋์ธ ๊ฒฝ์ฐ
// if(pack[0] <= unit[0] * 6) {
// payMoney += (N/6) * pack[0];
// payMoney += (N%6) * unit[0];
// }
// else {
// payMoney += N * pack[0];
// }
// 1) ์ ๋ถ๋ค ํจํค์ง ์ธํธ๋ก ๊ตฌ๋งคํ๋ ๊ฒฝ์ฐ - ((N/6) + 1) * pack[0]
// 2) ์ ๋ถ๋ค ๋ฑ๊ฐ๋ก ๊ตฌ๋งคํ๋ ๊ฒฝ์ฐ - (N * unit[0])
// 3) ํจํค์ง + ๋ฑ๊ฐ ์์ด์ ๊ตฌ๋งคํ๋ ๊ฒฝ์ฐ - ((N/6) * pack[0]) + ((N%6) * unit[0])
payMoney = Math.min(((N/6) + 1) * pack[0], Math.min(N * unit[0], ((N/6) * pack[0]) + ((N%6) * unit[0])));
System.out.println(payMoney);
scan.close();
}
}
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1783๋ฒ: ๋ณ๋ ๋์ดํธ(๊ทธ๋ฆฌ๋, ๊ตฌํ) (0) | 2020.02.04 |
---|---|
[๋ฐฑ์ค] 2667๋ฒ: ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ(๊ทธ๋ํ, DFS) (0) | 2020.02.03 |
[๋ฐฑ์ค] 1543๋ฒ: ๋ฌธ์ ๊ฒ์(๊ทธ๋ฆฌ๋, ์์ ํ์) (0) | 2020.02.03 |
[๋ฐฑ์ค] 2399๋ฒ: ๊ฑฐ๋ฆฌ์ ํฉ (0) | 2020.01.29 |
[๋ฐฑ์ค] 1946๋ฒ: ์ ์ ์ฌ์(๊ทธ๋ฆฌ๋, ์ ๋ ฌ) (0) | 2020.01.29 |
๋๊ธ