9_yoon
개발저장소
9_yoon
전체 방문자
오늘
어제
  • 분류 전체보기 (101)
    • 알고리즘 (52)
      • BJ (40)
      • 프로그래머스 (0)
      • SWEA (10)
      • JO (2)
    • 이론 공부 (7)
      • 네트워크 (2)
      • 알고리즘 (2)
      • Java (1)
      • Web (1)
      • 기타 (1)
    • 개발 공부 (35)
      • Project (1)
      • JavaScript (1)
      • Typescript (1)
      • Spring (12)
      • Java (2)
      • Next JS (7)
      • React (3)
      • Vue (1)
      • Web (5)
      • 기타 (2)
    • 기타 (7)
      • SSAFY (7)
      • 일상 (0)

인기 글

태그

  • SWEA
  • 싸피7기
  • 싸피
  • 노마드코더
  • SSAFY
  • 스프링
  • 김영한 스프링
  • React
  • NextJS
  • 백준

최근 글

티스토리

반응형
hELLO · Designed By 정상우.
9_yoon
알고리즘/BJ

[BJ] 백준 15686 치킨배달 (JAVA)

[BJ] 백준 15686 치킨배달 (JAVA)
알고리즘/BJ

[BJ] 백준 15686 치킨배달 (JAVA)

2022. 3. 5. 22:30
728x90
반응형

문제

https://www.acmicpc.net/problem/15686

풀이 방법

문제를 보고서 어떤식으로 문제를 풀어야할 지 순서를 생각해봤다. 
1. 우선 치킨집에서 어떤 치킨집을 남겨둘 것인지에 대한 조합 만들기
2. 골라진 치킨집들을 가지고 치킨거리를 구하기
3. 치킨 거리를 구하면서 최소값 저장하기
순서로 구현했다. 

 

제출 코드

import java.io.*;
import java.util.*;
public class BJ_15686_치킨배달 {
public static int N, M, minDist;
public static int[] chickenDist;
public static int[][] map;
public static int[][] selectChicken;
public static List<int[]> chickens;
public static List<int[]> homes;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
map = new int[N + 1][N + 1];
chickens = new ArrayList<>(); // 치킨 집 리스트
homes = new ArrayList<>(); // 집 리스트
selectChicken = new int[M][2]; // 고른 치킨집 리스트
for (int i = 1; i <= N; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < N; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
if (map[i][j] == 1)
homes.add(new int[] { i, j }); // 집 리스트에 넣어주기
else if (map[i][j] == 2)
chickens.add(new int[] { i, j }); // 치킨집리스트에 넣어주기
}
}
chickenDist = new int[homes.size()]; // 각 집마다 치킨거리 저장할 변수
minDist = Integer.MAX_VALUE;
combination(0, 0); // 조합 시작
System.out.println(minDist);
}
private static void combination(int cnt, int start) {
if (cnt == M) { // 기저 조건
// 각 집마다 치킨 거리 구하러가기
calcDist(selectChicken);
int sum = 0;
for (int i = 0; i < homes.size(); i++) { //각 치킨 거리의 합
sum += chickenDist[i];
}
minDist = Math.min(sum, minDist); //최소값으로
return;
}
for (int i = start; i < chickens.size(); i++) {
selectChicken[cnt] = chickens.get(i);
combination(cnt + 1, i + 1);
}
}
private static void calcDist(int[][] sc) {
for (int i = 0; i < homes.size(); i++) { // 각 집마다 치킨 거리 구하기
int min = Integer.MAX_VALUE;
for (int j = 0; j < M; j++) {
int dist = Math.abs(homes.get(i)[0] - sc[j][0]) + Math.abs(homes.get(i)[1] - sc[j][1]);
min = Math.min(dist, min); //치킨집과 집 사이에 가장 최단거리를 저장
}
chickenDist[i] = min; //치킨 거리 저장
}
}
}

 

728x90
반응형
저작자표시 비영리 동일조건 (새창열림)

'알고리즘 > BJ' 카테고리의 다른 글

[BJ] 백준 10163 색종이(JAVA)  (0) 2022.03.08
[BJ] 백준 2628 종이자르기 (JAVA)  (0) 2022.03.07
[BJ] 백준 2635 수 이어가기 (JAVA)  (1) 2022.03.02
[BJ] 백준 2304 창고 다각형 (JAVA)  (0) 2022.03.01
[BJ] 백준 15683 감시 (JAVA)  (0) 2022.02.28
  • 문제
  • 풀이 방법
  •  
  • 제출 코드
'알고리즘/BJ' 카테고리의 다른 글
  • [BJ] 백준 10163 색종이(JAVA)
  • [BJ] 백준 2628 종이자르기 (JAVA)
  • [BJ] 백준 2635 수 이어가기 (JAVA)
  • [BJ] 백준 2304 창고 다각형 (JAVA)
9_yoon
9_yoon
배울게 넘쳐나는 개발 세상에서 묵묵히 걸어가며 지식을 쌓는 신입 개발자

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.