๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm

[๋ฐฑ์ค€] 1049๋ฒˆ: ๊ธฐํƒ€์ค„(๊ทธ๋ฆฌ๋””, ๊ตฌํ˜„)

by ์ฃผ๋ฐœ2 2020. 2. 3.
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/1049

 

1049๋ฒˆ: ๊ธฐํƒ€์ค„

์ฒซ์งธ ์ค„์— N๊ณผ M์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 100๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๊ณ , M์€ 50๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ ๋ธŒ๋žœ๋“œ์˜ ํŒจํ‚ค์ง€ ๊ฐ€๊ฒฉ๊ณผ ๋‚ฑ๊ฐœ์˜ ๊ฐ€๊ฒฉ์ด ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ€๊ฒฉ์€ 0๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 1,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ •์ˆ˜์ด๋‹ค.

www.acmicpc.net

ํ‹€๋ฆฐ ์ฝ”๋“œ

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();
	}

}

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€