-
[SWEA] 2115 ๋ฒ๊ฟ์ฑ์ทจ_JAVASTUDY ๐/์๊ณ ๋ฆฌ์ฆ 2021. 2. 3. 21:02๋ฐ์ํ
https://grafolio.naver.com/haribo7970 โฌ๏ธ ์๊ฑด ๊ทธ๋ฅ ๊ท์ฌ์์...ใ ใ ใ
* ์ด ๋ฌธ์ ๊ฐ ์ ํ์ ์ธ ์์ก ์ฝํ ์ ํ์ด ์๋๊น ์ถ์...!
[๋ฌธ์ ]
swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5V4A46AdIDFAWuSW Expert Academy
SW ํ๋ก๊ทธ๋๋ฐ ์ญ๋ ๊ฐํ์ ๋์์ด ๋๋ ๋ค์ํ ํ์ต ์ปจํ ์ธ ๋ฅผ ํ์ธํ์ธ์!
swexpertacademy.com
[Solution]
- DFS ์๊ณ ๋ฆฌ์ฆ
- ๋ฒํต ์กฐํฉ์ ๋จผ์ ์ฐพ๊ณ ์กฐํฉ ๋ด์์ C๋ฅผ ๋์ง ์๋๋งํผ์ ๋ฒํต ์กฐํฉ์ ์ฐพ์package swea2115_๋ฒ๊ฟ์ฑ์ทจ; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; class Solution { static int[][] map; static int[][] worker; static boolean[] selected; static int[] money; static int C, M, N, result; public static void main(String args[]) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int T = Integer.parseInt(st.nextToken()); for(int test_case = 1; test_case <= T; test_case++){ st = new StringTokenizer(br.readLine()); N = Integer.parseInt(st.nextToken()); M = Integer.parseInt(st.nextToken()); //์ ํํ ์ ์๋ ๋ฒํต ๊ฐ์ C = Integer.parseInt(st.nextToken()); //์ฑ์ทจํ ์ ์๋ ๊ฟ์ ์ต๋ ์ map = new int[N][N]; boolean[][] visited = new boolean[N][N]; selected = new boolean[M]; worker = new int[2][M]; //i:์ผ๊พผ 2๋ช num, j:์ ํํ ๋ฒํต์ ์๋ ๊ฟ for(int i=0; i<N; i++) { st = new StringTokenizer(br.readLine()); for(int j=0; j<N; j++) { map[i][j] = Integer.parseInt(st.nextToken()); } } result = 0; selectHoneyWk(visited, 0, 0); System.out.println("#" + test_case + " " + result); } } static void selectHoneyWk(boolean[][] visited, int start, int r) { if(r == 2) { money = new int[2]; for(int i=0; i<2; i++) { honeyCombination(i, 0, 0); } //ํ๋์ฝค๋ณด ๋๋๋ฉด total = money[0]+money[1]ํ ๊ฐ ๊ตฌํ๊ธฐ //total์ค ๊ฐ์ฅ ํฐ ํ ํ์ด ๋ต int total = money[0] + money[1]; result = Math.max(total, result); return; } for(int i=start; i<N; i++) { out : for(int j=0; j<N; j++) { //๊ฐ๋ก๋ก M๊ฐ ์ ํ์ด ๋ถ๊ฐ๋ฅํ ๋ ์ ์ธ if(j+M-1 >= N) continue; //์ด๋ฏธ ์ ํํ ๋ฒํต ์ ์ธ for(int k=0; k<M; k++) { if (visited[i][j+k]) continue out; } //๋ฒํต์ ํ for(int k=0; k<M; k++) { //(i, j), (i, j+1), ... ๊ฐ๋ก๋ก k๊ฐ ์ ํ visited[i][j+k] = true; worker[r][k] = map[i][j+k]; } selectHoneyWk(visited, start, r+1); //์ ํ๋ ๋ฒํต ํด์ for(int k=0; k<M; k++) { visited[i][j+k] = false; } } } } static void honeyCombination(int wkNum, int sum, int m) { //์ผ๊พผ 1๋ฒ๋ฑ์ฅ //์ผ๊พผ1๋ฒ์ด ์ ํํ ์ ์๋ ๋ฒํต ์ค์์ ๊ฐ์ฅ ๋ง์๊ฑธ ์ฐพ์์ money[0]์ ์ ์ฅ //์ผ๊พผ 2๋ฒ๋ฑ์ฅ ... money[wkNum] = Math.max(money[wkNum], m); for(int i=0; i<M; i++) { //์ ํ๋ ๋ฒํต ํต๊ณผ if(selected[i]) continue; if(sum + worker[wkNum][i] <= C) { selected[i] = true; honeyCombination(wkNum, sum+worker[wkNum][i], m+worker[wkNum][i]*worker[wkNum][i]); selected[i] = false; } } } }
๋ฐ์ํ'STUDY ๐ > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 18352 ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ_JAVA (0) 2021.02.09 [2021 ์นด์นด์ค ๋ธ๋ผ์ธ๋ ์ฝ๋ฉํ ์คํธ] ํฉ์น ํ์ ์๊ธ JAVA (0) 2021.02.04 [BOJ] 14501 ํด์ฌ_JAVA (0) 2021.02.03 [BOJ] 2110 ๊ณต์ ๊ธฐ ์ค์น_JAVA (0) 2021.02.03 [BOJ] 1371 ๊ฐ์ฅ ๋ง์ ๊ธ์_JAVA (0) 2020.06.14