๐ ๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/19621
๐ฎ ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ
๋ฌธ์ ์ ์ ํ ์กฐ๊ฑด์์ K ๋ฒ์งธ ํ์๋ K-1 , K+1๋ฒ์งธ ํ์์ ๊ฒน์น๋ค๊ณ ํ๊ธฐ ๋๋ฌธ์ K ๊ธฐ์ค์ผ๋ก ํ์๋ฅผ ์ฐธ์ํ๋ ๊ฒฝ์ฐ K-1, K+1ํ์๋ ์ฐธ์ํ ์ ์๋ค.
๋ฐ๋๋ก ํ์์ ์ฐธ๊ฐํ์ง ์๋ ๊ฒฝ์ฐ K-1, K+1 ํ์๋ ์ฐธ๊ฐํ ์ ์๋ค.
๋ฐ๋ผ์, ์ฒซ ํ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฐธ๊ฐํ๋ ๊ฒฝ์ฐ์ ๋ถ์ฐธํ๋ ๊ฒฝ์ฐ๋ก DFS๋ฅผ ์ด์ฉํ ์์ ํ์์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
- ํ์์ ์ต๋ ๊ฐ์๊ฐ25๊ฐ๊น์ง ์ฃผ์ด์ง๋ฏ๋ก DFS๋ฅผ ์ด์ฉํ ์์ ํ์์ด ๊ฐ๋ฅํ๋ค.
- ์ฒซ ๋ฒ์งธ ํ์ ๊ธฐ์ค์ผ๋ก ์ฐธ๊ฐ์ ๋ถ์ฐธ ๊ฒฝ์ฐ๋ก ํ์์ ์งํํ๋ค.
- ์ฒซ ๋ฒ์งธ ํ์์ ์ฐธ๊ฐํ๋ ๊ฒฝ์ฐ 2๋ฒ์งธ ํ์๋ ์ฐธ๊ฐํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ 3๋ฒ์งธ ํ์์ ์ฐธ๊ฐํ๋๋ก depth + 2๋ฅผ ํด์ฃผ๊ณ ํ์ฌ ํ์์ ์ฐธ์ฌํ์ผ๋ฏ๋ก ํ์ฌ๊น์ง์ ํ์ ์ฐธ๊ฐ ์ธ์ + ํ์ฌ ํ์ ์ฐธ๊ฐ ์ธ์์ ๋ฃ์ด์ค๋ค.
- ์ฒซ ๋ฒ์งธ ํ์์ ๋ถ์ฐธํ๋ ๊ฒฝ์ฐ 2๋ฒ์งธ ํ์๋ ์ฐธ๊ฐํ ์ ์๊ธฐ ๋๋ฌธ์ 2๋ฒ์งธ ํ์์ ์ฐธ๊ฐํ๋๋ก depth + 1๋ฅผ ํด์ฃผ๊ณ ํ์ฌ ํ์์ ๋ถ์ฐธํ์ผ๋ฏ๋ก ๊ทธ๋๋ก ํ์ฌ๊น์ง์ ํ์ ์ฐธ๊ฐ ์ธ์์ ๋ฃ์ด์ค๋ค.
๐ฉ Java ์ฝ๋
package com.algorithm.Baekjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class Main_19621_ํ์์ค_๋ฐฐ์ _2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
List<Room> roomList = new ArrayList<>();
for(int loop = 0; loop < N ; loop++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
int headcount = Integer.parseInt(st.nextToken());
roomList.add(new Room(start, end, headcount));
}
int rst = getMaxHeadcount(N, roomList);
System.out.println(rst);
br.close();
}
private static int headcount;
private static int getMaxHeadcount(int n, List<Room> roomList) {
headcount = 0;
// n์ด ์ต๋ 25์ด๋ฏ๋ก dfs๋ฅผ ์ด์ฉํ ์์ ํ์ ๊ฐ๋ฅ
dfs(0, roomList, 0, n);
return headcount;
}
private static void dfs(int depth, List<Room> roomList, int count, int n) {
// List์ Max ์ธ๋ฑ์ค๊ฐ n-1๊น์ง ์ด๋ฏ๋ก ์ด ์ด์์ด ๋๋ ๊ฒฝ์ฐ ๋ชจ๋ ํ์๊ฐ ๋๋ ๊ฒฝ์ฐ
if(depth > n-1) {
headcount = Math.max(headcount, count);
return;
}
// ํ์ฌ ํ์ ์ฐธ์ฌํ๋ ๊ฒฝ์ฐ ๋ค์ ํ์ ์ฐธ์ฌ ๋ชปํจ
dfs(depth + 2, roomList, count + roomList.get(depth).getHeadcount(), n);
// ํ์ฌ ํ์ ์ฐธ์ฌํ์ง ์๋ ๊ฒฝ์ฐ ๋ค์ ํ์ ์ฐธ์ฌ
dfs(depth + 1, roomList, count, n);
}
static class Room {
private int start;
private int end;
private int headcount;
public Room(int start, int end, int headcount) {
this.start = start;
this.end = end;
this.headcount = headcount;
}
public int getStart() {
return start;
}
public int getEnd() {
return end;
}
public int getHeadcount() {
return headcount;
}
}
}
๋ฐ์ํ
'Algorithm > BFS & DFS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค, Java] 14226๋ฒ : ์ด๋ชจํฐ์ฝ (0) | 2022.07.27 |
---|---|
[๋ฐฑ์ค, Java] 1039๋ฒ : ๊ตํ (0) | 2022.07.22 |
[๋ฐฑ์ค, Java] 9934๋ฒ : ์์ ์ด์ง ํธ๋ฆฌ (0) | 2022.05.20 |
[๋ฐฑ์ค, Java] 16928๋ฒ : ๋ฑ๊ณผ ์ฌ๋ค๋ฆฌ ๊ฒ์ (0) | 2022.05.09 |
[๋ฐฑ์ค, Java] 1967๋ฒ : ํธ๋ฆฌ์ ์ง๋ฆ (0) | 2022.05.08 |