https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV15OZ4qAPICFAYD
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Solution {
static int N, visit[][], min, officeR, officeC, houseR, houseC;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine()); // 전체 테스트 케이스의 수
for (int testCase = 1; testCase <= T; testCase++) {
N = Integer.parseInt(br.readLine()); // 고객 수
visit = new int[N][2];
// 회사의 좌표,집의 좌표, N명의 고객의 좌표
StringTokenizer st = new StringTokenizer(br.readLine());
officeR = Integer.parseInt(st.nextToken());
officeC = Integer.parseInt(st.nextToken());
houseR = Integer.parseInt(st.nextToken());
houseC = Integer.parseInt(st.nextToken());
for (int i = 0; i < N; i++) {
visit[i][0] = Integer.parseInt(st.nextToken());
visit[i][1] = Integer.parseInt(st.nextToken());
}
min = Integer.MAX_VALUE;
visit(0, 0, 0, officeR, officeC); // Office부터 고객 집 방문하기
sb.append("#").append(testCase).append(" ").append(min).append("\n");
}
System.out.println(sb);
}
private static void visit(int cnt, int sum, int flag, int r, int c) {
// 방문한 집 count, 거리 합, 방문한 집 체크, 현재 r, 현재 c
// N개의 집 모두 방문했을 경우 마지막 고객의 집에서 자신의 집까지의 거리 더해서 최솟값 구하기
if (cnt == N) {
min = Math.min(min, sum + getDistance(r, c, houseR, houseC));
return;
}
if (sum > min) {
return;
}
for (int i = 0; i < N; i++) {
if ((flag & (1 << i)) != 0) {
continue;
}
visit(cnt + 1, sum + getDistance(r, c, visit[i][0], visit[i][1]), (flag | (1 << i)), visit[i][0],
visit[i][1]);
}
}
public static int getDistance(int x1, int y1, int x2, int y2) {
return Math.abs(x1 - x2) + Math.abs(y1 - y2);
}
}
'SW Expert Academy > Java' 카테고리의 다른 글
[SW Expert Academy] 10912. 외로운 문자 - D3 / Java (0) | 2021.08.22 |
---|---|
[SW Expert Academy] 1974. 스토쿠 검증 - D2 / Java (0) | 2021.08.22 |
[SW Expert Academy] 1859. 백만 장자 프로젝트 - D2 / Java (0) | 2021.08.16 |
[SW Expert Academy] 1954. 달팽이 숫자 - D2 / Java (0) | 2021.08.03 |
[SW Expert Academy] 1926. 간단한 369게임 - D2 / Java (0) | 2021.06.17 |