-
728x90๋ฐ์ํ
๋ ์ง : 2021 ๋ 11 ์ 3 ์ผ
์์ฒญ ๊ฐ์ : ํ์ ์๊ณ ๋ฆฌ์ฆ์ ์ดํด (1) , ํ์ ์๊ณ ๋ฆฌ์ฆ์ ์ดํด (2)Greedy Algorithms
ํ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ด ๋ฌธ์ ๋ ์ ๋ ฌ์ ์ด์ฉ, ๋ณดํต DP๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํธ๋ ๊ฒ ๊ฐ๋ค. ๋ณธ ๊ฐ์์ ๋์จ ์์ ๋ ๋๊ฐ๋ด๋ ์ ๋ ฌ๋ก ํธ๋ ๋ฌธ์ ์์ง๋ง ๋ณดํต ํ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฝํ ์์ ๋ง๋ฌ์ ๋ ํ์ ๊ธฐ๋ฒ์ผ๋ก ํ ๊ฒ์ด๋ผ ์์๋ ๋ชปํ๋ ๊ฒ๋ค์ด ๋ง๋ค๊ณ ํ๋ ์ ํ์ ์ธ ์ ํ๋ค๋ง ๋ช๊ฐ ๊ณต๋ถํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
๋ฌธ์ ์ ํ :
1. ๊ฑฐ์ค๋ฆ๋ ์ค์ด๊ธฐ
์๋์ด ์ง๋ถํ ๊ธ์ก์์ ๋ฌผ๊ฑด๊ฐ์ ์ ํ ์ฐจ์ก์ ์ง๋ถํ๋ ๋ฌธ์ฌ.
๋์ ์ ์ต์ํ์ผ๋ก ์ฃผ๊ณ ์ถ์ ๋
-> ์ฃผ๋ก, 500์ 1000์์ด ์๋๋ผ 400์ 300์ ์ด๋ฐ์์ผ๋ก ๋์ค๊ธฐ ๋๋ฌธ์ ์ ๋ ฌ๋ก ํ ์ ์๊ณ DP๋ฅผ ์ด์ฉํ์ฌ ํ์ด์ผํ๋ค2. ์คํ๋ฐฐ๋ฌ
https://www.acmicpc.net/problem/28392839๋ฒ: ์คํ ๋ฐฐ๋ฌ
์๊ทผ์ด๋ ์์ฆ ์คํ๊ณต์ฅ์์ ์คํ์ ๋ฐฐ๋ฌํ๊ณ ์๋ค. ์๊ทผ์ด๋ ์ง๊ธ ์ฌํ๊ฐ๊ฒ์ ์คํ์ ์ ํํ๊ฒ Nํฌ๋ก๊ทธ๋จ์ ๋ฐฐ๋ฌํด์ผ ํ๋ค. ์คํ๊ณต์ฅ์์ ๋ง๋๋ ์คํ์ ๋ด์ง์ ๋ด๊ฒจ์ ธ ์๋ค. ๋ด์ง๋ 3ํฌ๋ก๊ทธ
www.acmicpc.net
์ ๋ฌธ์ ๋ ๋ํ์ ์ธ DP ๋ฌธ์ ์ด๋ค. DP๋ก ์ ๊ทผํ์ง ์๊ณ ํ์๋ ๊ฒฝํ์ด ์๋๋ฐ ํ์ ๋น๊ตํ๋ DP๋ก ํผ ๊ฒ ๊ณผ ๊ฑฐ์ ๋น์ทํ๋ค. DP๋ก ํ์์ ๋ ์์ฒญ ์งง๊ณ ๊ฐํธํ๊ธฐ ๋๋ฌธ์ DP ๋ฌธ์ ์ ํ๋ค์ ์ต์ํ๊ฒ ํด๋๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
3. Knapsack
( 1 ) Fractional Knapsack (๋ถ๋ถ ๋ ์น)์ ์ ๋ ฌ์ ์ด์ฉํ์ฌ ํ ์ ์๋ ํ์ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ์ด๋ค. ๋ฌผ๊ฑด์ ๊ฐ์ฑ๋น๊ฐ ๊ฐ์ฅ ์ข์ ์ ๋ค๋ก ์ฑ์๋ฃ๊ณ ๋ฐฐ๋ญ์ ๋ค์ ๋ฌผ๊ฑด์ ์ง์ด๋ฃ์ง ๋ชปํ๋ฉด ๊ทธ ๋ฌผ๊ฑด์ ์ชผ๊ฐ์ ๋ฃ๋๋ค. ์ฆ, ๊ฐ์ฑ๋น์์ผ๋ก ์ ๋ ฌํ ํ ํธ๋ ๋ฌธ์ ๋ค
( 2 ) 0/1 Knapsack ์ ์ ๋ง ๋ํ์ ์ธ DP ๋ฌธ์ ๋ค.
https://www.acmicpc.net/problem/12865
12865๋ฒ: ํ๋ฒํ ๋ฐฐ๋ญ
์ฒซ ์ค์ ๋ฌผํ์ ์ N(1 โค N โค 100)๊ณผ ์ค์๊ฐ ๋ฒํธ ์ ์๋ ๋ฌด๊ฒ K(1 โค K โค 100,000)๊ฐ ์ฃผ์ด์ง๋ค. ๋ ๋ฒ์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ๊ฑฐ์ณ ๊ฐ ๋ฌผ๊ฑด์ ๋ฌด๊ฒ W(1 โค W โค 100,000)์ ํด๋น ๋ฌผ๊ฑด์ ๊ฐ์น V(0 โค V โค 1,000)
www.acmicpc.net
์ ๋ฌธ์ ๋ฅผ ์์ ํ์์ผ๋ก ํ์์ ๋์๋ ๊ณ์ ํ๋ ธ์ต๋๋ค๊ฐ ๋ฌ๋ค. K ๊ฐ๊ณผ N ๊ฐ์ ๊ณ ๋ คํด ๋ดค์ ๋ ๋น์ฐํ ๊ฒฐ๊ณผ๋ค.... ํ์ง๋ง DP๋ฅผ ์ฌ์ฉํ๋ฉด ๊ทธ ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์ ํด๋๊ธฐ ๋๋ฌธ์ ์ค๋ฅ๊ฐ ๋ ์ผ์ด ์๋ค.
์๋๋ ์ ๋ฌธ์ ์ ์ฝ๋์ด๋ค.
import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.Arrays;import java.util.StringTokenizer;public class Main {//dp๋ก ์ ๊ทผ. ์์กฐ๋ถ๋ก ํ๋๋ ๊ณ์ ์คํจpublic static void main(String[] args) throws Exception {BufferedReader br= new BufferedReader(new InputStreamReader(System.in));StringTokenizer st = new StringTokenizer(br.readLine());int N = Integer.parseInt(st.nextToken());//๋ฌผ๊ฑด์ ์int K = Integer.parseInt(st.nextToken());//๋ฐฐ๋ญ์ ํ๋int[] D = new int[K+1]; //๊ฐ๋ฐฉ DP ๋ฐฐ์ด(์ต๋ ๊ฐ์น)int[] weights = new int[N+1]; //๋ฌด๊ฒ ๋ฐฐ์ดint[] values = new int[N+1]; //๋ฌผ๊ฑด์ ๊ฐ์นfor(int i= 1; i<=N ;i++) {st = new StringTokenizer(br.readLine());weights[i] = Integer.parseInt(st.nextToken()); //๊ฐ ๋ฌผ๊ฑด์ ๋ฌด๊ฒvalues[i] = Integer.parseInt(st.nextToken());//๊ฐ ๋ฌผ๊ฑด์ ๊ฐ์น}//end of input//Dp: ๋ฌผ๊ฑด ๊ฐ์น์ ์ต๋๊ฐfor(int i =1; i<=N ; i++) {//๋ชจ๋ ๋ฌผ๊ฑด์ ๋ํ์ฌfor(int w = K ; w>=weights[i]; w--) {//๊ฑฐ๊พธ๋ก ์ํ -> ํ์ฌ ๋ฌด๊ฒ ๋จ์๋งํผ ๋ณด๋๊ฑฐD[w] = Math.max(D[w], values[i]+D[w-weights[i]]);//๋ด์ง ์๋ ์ํฉ vs ๋ด๋ ์ํฉ//๋ด๋ ์ํฉ์ผ ๋: ํ์ฌ ๋ฌผ๊ฑด ๊ฐ์น + ๋ฌผ๊ฑด ๋ด์์๋ ๋จ๋ ๊ฐ๋ฐฉ ๋ฌด๊ฒ}}//์ต๋ ๊ฐ์น ์ถ๋ ฅSystem.out.println(D[K]);}}์ฝ๋๋ ๋งค์ฐ ์งง๊ธฐ ๋๋ฌธ์ ์ฌ์ค์ ์ ๋ถ input์ ๋ด๋ ์ฝ๋๊ณ solution ์ฝ๋๋ 3์ค๋ฐ์ ์๋ค.
๋ฐ๋ผ์, ์ ์ตํ๋๋ฉด ๋น์ทํ ์ ํ์ด ๋์ฌ ๋ ์ ๋ง ์์ฝ๊ฒ ํ ์ ์์ ๊ฒ ๊ฐ๋ค.
๋ค์์, 0/1 Knapsack์ ์ข ๋ ์์ธํ๊ฒ ์ ๋ฆฌํ๊ณ ์ ํ๋ค.
4. ๋ณ๋๊ป ๊ฐ์
์ด์ง ๊ฒ์์ ํ๊ธฐ ์ํด ์ ๋ ฌํ์ฌ ์จ์ผํ๋ค.
์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
์์ ๋งํ, ๊ทธ๋ฆฌ๋ ๋ฌธ์ ๋ฅผ ์ ๋ ฌ๋ก ํ๊ธฐ ์ํด์๋ Comparator๋ Commparable์ ์ฌ์ฉํ๋ค.
import java.util.Arrays;class Burger{String name;int price;Burger(String name, int price){}}public class Test01 {public static void main(String[] args) {Burger[] burgers = new Burger[3];burgers[0] = new Burger("1957",6000);burgers[1] = new Burger("๋๋ธ๋ถ๊ณ ๊ธฐ",7000);burgers[2] = new Burger("ํ์ฐ๋ฒ๊ฑฐ", 8000);Arrays.sort(burgers); //Exception occurs}}์ ์ฝ๋๋ฅผ ์คํ์ํค๋ฉด ClassCaseException์ด ๋ฐ์ํ๋ค.
์ด์ ๋ Arrays.sort์ ๊ธฐ์ค์ ์ธ comparable์ ๋ฒ๊ฑฐ ๊ฐ์ฒด (String name , int price ) ๋ฅผ ์ ๋ ฌํ๋ ๊ธฐ์ค์ ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์, Comparator๋ Comparable์ ์ฌ์ฉํ์ฌ ๊ธฐ์ค์ ์ ์ฌ์ด์ฃผ๋ฉด ๋๋ค.
Arrays.sort(arr, new Comparator<int[]>() {@Overridepublic int compare(int[] o1, int[] o2) {return o1[1]-o2[1];}});print(arr);์ต๋ช ํด๋์ค์์ Comparator๋ฅผ ํ์ฉํ ๋ฐฉ์์ด๋ค.
//๋๋ค์์ผ๋ก ์ฒ๋ฆฌํ๊ธฐArrays.sort(arr, (o1, o2)-> o1[1] - o2[1]);print(arr);๋๋ค์์ ์ด์ฉํ๋ฉด ํจ์ฌ ๋ ์งง๊ณ ๊ฐ๋จํด์ง๋ค.
ํจ์คํธ์บ ํผ์ค ํ๊ธ ์ฑ๋ฆฐ์ง ๋ฐ๋ก๊ฐ๊ธฐ๐ https://bit.ly/3FVdhDa
์๊ฐ๋ฃ 100% ํ๊ธ ์ฑ๋ฆฐ์ง | ํจ์คํธ์บ ํผ์ค
๋ฑ 5์ผ๊ฐ ์งํ๋๋ ํ๊ธ์ฑ๋ฆฐ์ง๋ก ์๊ฐ๋ฃ 100% ํ๊ธ๋ฐ์ผ์ธ์! ๋ ๋ฆ๊ธฐ์ ์ ์๊ธฐ๊ณ๋ฐ ๋ง์ฐจ ํ์น!
fastcampus.co.kr
๋ณธ ํฌ์คํ ์ ํจ์คํธ์บ ํผ์ค ํ๊ธ ์ฑ๋ฆฐ์ง ์ฐธ์ฌ๋ฅผ ์ํด ์์ฑ๋์์ต๋๋ค.
728x90๋ฐ์ํ'๐ STUDY > FASTCAMPUS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 5์ผ์ฐจ (0) 2021.11.05 ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 4์ผ์ฐจ (0) 2021.11.04 ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 2์ผ์ฐจ (0) 2021.11.02 ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 1์ผ์ฐจ (0) 2021.11.01 [FASTCAMPUS] ๊ฐ์์ด๊ธฐ 30์ผ 100% ํ๊ธ ์ฑ๋ฆฐ์ง (0) 2021.11.01