삐까냥의 파도타기
15686번) 치킨배달 본문
https://www.acmicpc.net/problem/15686
음..음..
다듬지 않은 코드 import java.util.ArrayList; import java.util.Scanner; public class Q15686 {
static int[][] map; static int mapSize, chickenNum, result = -1; static boolean[] isVisit; static ArrayList<Chicken> chickenList = new ArrayList<Chicken>();
public static void main(String[] args) { Scanner sc = new Scanner(System.in);
mapSize = sc.nextInt(); chickenNum = sc.nextInt();
map = new int[mapSize][mapSize]; for (int i = 0; i < mapSize; i++) { for (int j = 0; j < mapSize; j++) { int type = sc.nextInt();
if (type == 0) { continue; }
map[i][j] = type; if (type == 2) { chickenList.add(new Chicken(i, j)); } } }
isVisit = new boolean[chickenList.size()]; for (int i = 0; i < chickenList.size(); i++) { isVisit[i] = true; searchChicken(i, 1); isVisit[i] = false; }
System.out.println(result); }
static void searchChicken(int nowChickenNum, int count) { if (count < chickenNum) { for (int i = nowChickenNum+1; i < chickenList.size(); i++) { isVisit[i] = true; searchChicken(i, count+1); isVisit[i] = false; } } else { int tempResult = 0; for (int i = 0; i < mapSize; i++) { for (int j = 0; j < mapSize; j++) { if (map[i][j] == 1) { int minDistance = -1; for (int k = 0; k < chickenList.size(); k++) { if (isVisit[k]) { int distance = getDistance(i, j, chickenList.get(k)); if (minDistance == -1 || minDistance > distance) { minDistance = distance; } } } tempResult += minDistance; } } }
if (result == -1 || result > tempResult) { result = tempResult; } } }
static int getDistance(int y1, int x1, Chicken chicken) { int dy = y1 - chicken.y; int dx = x1 - chicken.x;
if (dy < 0) { dy *= -1; } if (dx < 0) { dx *= -1; }
return dy + dx; }
} class Chicken { int y, x; public Chicken(int y, int x) { this.y = y; this.x = x; } } |
'코딩 > 삼성 SW 역량 테스트 기출' 카테고리의 다른 글
15685번) 드래곤 커브 (0) | 2018.05.23 |
---|---|
15684번) 사다리 조작 (0) | 2018.05.22 |
15683번) 감시 (0) | 2018.05.19 |
2117. 홈 방범 서비스 (0) | 2018.04.13 |
삼성 SW 역량 테스트 기출 문제 후기 (0) | 2018.04.09 |