일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- HUFS 모각코 캠프
- 다이나믹프로그래밍
- react
- 자바
- ubuntu
- java_programming
- Python
- 백준 1253번
- 다이나믹 프로그래밍
- MySQL
- SWEA 15612번
- 머신러닝과 딥러닝
- 백준 15787번
- 그래프
- javascript
- 알고리즘
- 백준 17451번
- 백준 1987
- 백준 2512번
- 백준 1331번
- 백준 16918번
- 깃헙
- 모각코
- 백준 18310번
- 백준
- 명품자바
- 그리디
- 백준 3085번
- SQL
- AWS
Archives
- Today
- Total
차곡차곡
[SWEA/Java] SW Expert Academy 1247번 - 최적 경로 본문
SW Expert Academy #1247 최적 경로
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Solution {
private static int N, minDist;
private static int[] office;
private static int[] home;
private static int[][] cust;
private static int[] nums;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int T = Integer.parseInt(st.nextToken());
for (int t = 1; t <= T; t++) {
N = Integer.parseInt(br.readLine()); // 고객 수
office = new int[2]; // 회사 좌표
home = new int[2]; // 집 좌표
cust = new int[N][2]; // 고객 좌표
st = new StringTokenizer(br.readLine());
office[0] = Integer.parseInt(st.nextToken());
office[1] = Integer.parseInt(st.nextToken());
home[0] = Integer.parseInt(st.nextToken());
home[1] = Integer.parseInt(st.nextToken());
for (int i = 0; i < N; i++) {
cust[i][0] = Integer.parseInt(st.nextToken());
cust[i][1] = Integer.parseInt(st.nextToken());
}
nums = new int[N];
minDist = Integer.MAX_VALUE;
makePermutation(0, 0);
System.out.println("#" + t + " " + minDist);
}
}
public static void makePermutation(int cnt, int flag) {
if (cnt == N) {
calcDist();
return;
}
for (int i = 0; i < N; i++) {
if ((flag & 1<<i) != 0) continue;
nums[cnt] = i;
makePermutation(cnt+1, flag|1<<i);
}
}
public static void calcDist() {
int[] now = office;
int dist = 0;
for (int i = 0; i < N; i++) {
dist += Math.abs(now[0] - cust[nums[i]][0]) + Math.abs(now[1] - cust[nums[i]][1]);
now = cust[nums[i]];
}
dist += Math.abs(home[0] - now[0]) + Math.abs(home[1] - now[1]);
minDist = Math.min(minDist, dist);
}
}
모든 경우의 수를 다 구했다. 고객의 집 방문 순서를 순열로 모두 구해 가장 짧은 경로를 찾았다.
'CS > Algorithm' 카테고리의 다른 글
[BOJ/Java] 백준 7795번 - 먹을 것인가 먹힐 것인가 (0) | 2023.08.18 |
---|---|
[BOJ/Java] 백준 1987번 - 알파벳 (0) | 2023.08.18 |
[BOJ/Java] 백준 1074번 - Z (0) | 2023.08.16 |
[BOJ/Python, Java] 백준 2004번 - 조합 0의 개수 (0) | 2023.08.13 |
[BOJ/Java] 백준 17406번 - 배열 돌리기 4 (0) | 2023.08.11 |
Comments