728x90
구현
DFS
달마다 1일 이용권 / 1달 이용권 / 3달 이용권 / 1년 이용권을 쓸 때, 가작 적은 비용으로 일년동안 수영장을 이용할 수 있는 경우를 찾아 비용을 출력하는 문제이다.
1년 이용권은 달마다 탐색할 필요가 없어 미리 result 에 1년 이용권 요금을 넣어둔 후, 1일/1달/3달이용권을 달마다 DFS를 통해 탐색해보고 최소비용을 찾아 result와 비교한 후 답을 출력하였다.
dfs(m + 1, sum + price[0] * year[m]);
dfs(m + 1, sum + price[1]);
dfs(m + 3, sum + price[2]);
DFS를 이용하면 쉽게 해결할 수 있는 문제였다.
#소스코드
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Solution {
static int result;
static int[] year, price = new int[4];
public static void dfs(int m, int sum) {
if (m > 12) {
result = Math.min(result, sum);
return;
}
dfs(m + 1, sum + price[0] * year[m]);
dfs(m + 1, sum + price[1]);
dfs(m + 3, sum + price[2]);
}
public static void main(String[] args) throws NumberFormatException, IOException {
// System.setIn(new FileInputStream("sample_input.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
int T = Integer.parseInt(br.readLine());
for (int t = 1; t <= T; t++) {
year = new int[13];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < 4; i++)
price[i] = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
for (int i = 1; i <= 12; i++) {
year[i] = Integer.parseInt(st.nextToken());
}
result = price[3];
dfs(1, 0);
sb.append('#').append(t).append(' ').append(result).append('\n');
}
System.out.println(sb);
}
}
코드에 대한 피드백은 언제나 환영입니다🧚🏻♀️
728x90
'Algorithm > Problem Solving' 카테고리의 다른 글
[SWEA/D3] 1860. 진기의 최고급 붕어빵 - JAVA 자바 (0) | 2024.03.01 |
---|---|
[SWEA/모의 SW역량테스트] 2115. 벌꿀 채취 - JAVA 자바 (2) | 2024.02.29 |
[SWEA/모의 SW역량테스트] 2117. 홈 방범 서비스 - JAVA 자바 (0) | 2024.02.23 |
[SWEA/D4] 1238. Contact - JAVA 자바 (0) | 2024.02.22 |
[SWEA/SW Test 샘플] 1767. 프로세서 연결하기 - JAVA 자바 (1) | 2024.02.21 |