쵼쥬
쵼쥬의 개발공부 TIL
쵼쥬
전체 방문자
오늘
어제
  • 분류 전체보기 (276)
    • 코딩테스트 (192)
      • [알고리즘] 알고리즘 정리 (7)
      • [백준] 코딩테스트 연습 (126)
      • [프로그래머스] 코딩테스트 연습 (59)
    • Spring (71)
      • [인프런] 스프링 핵심 원리- 기본편 (9)
      • [인프런] 스프링 MVC 1 (6)
      • [인프런] 스프링 MVC 2 (4)
      • [인프런] 실전! 스프링 부트와 JPA 활용1 (7)
      • [인프런] 실전! 스프링 부트와 JPA 활용2 (5)
      • [인프런] 실전! 스프링 데이터 JPA (7)
      • [인프런] 실전! Querydsl (7)
      • JWT (5)
      • [인프런] Spring Cloud (17)
      • [인프런] Spring Batch (4)
    • Java (6)
      • [Java8] 모던인자바액션 (4)
      • [부스트코스] 웹 백엔드 (2)
      • [패스트캠퍼스] JAVA STREAM (0)
    • CS (6)
      • 디자인 패턴과 프로그래밍 패터다임 (2)
      • 네트워크 (4)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • 자바
  • 구현
  • 백준
  • 코딩테스트
  • BFS
  • querydsl
  • 타임리프
  • jpa
  • spring
  • 스프링
  • 백분
  • 인프런
  • 위클리 챌린지
  • 알고리즘
  • 누적합
  • 부스트코스
  • Spring Data JPA
  • MVC
  • 프로그래머스
  • 비트마스킹

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
쵼쥬

쵼쥬의 개발공부 TIL

치킨 배달 - 15686번
코딩테스트/[백준] 코딩테스트 연습

치킨 배달 - 15686번

2022. 2. 23. 10:53


내 코드

import java.io.*;
import java.util.*;

public class Main {
	static int N, M, min;
	static ArrayList<int[]> home, chicken;
	static int[] distance;

	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());
		home = new ArrayList<>();
		chicken = new ArrayList<>();
		min = Integer.MAX_VALUE;

		for (int i = 0; i < N; i++) {
			st = new StringTokenizer(br.readLine());
			for (int j = 0; j < N; j++) {
				int x = Integer.parseInt(st.nextToken());
				if (x == 2) {
					chicken.add(new int[] { i, j });
				} else if (x == 1) {
					home.add(new int[] { i, j });
				}
			}
		}

		distance = new int[home.size()];
		Arrays.fill(distance, 100);

		dfs(-1, 0);

		System.out.println(min);
	}

	static void dfs(int index, int count) {
		if (count > M) {
			return;
		}

		min = Math.min(min, Arrays.stream(distance).sum());
		int[] temp = distance.clone();

		for (int i = index + 1; i < chicken.size(); i++) {
			for (int j = 0; j < home.size(); j++) {
				int x = Math.abs(chicken.get(i)[0] - home.get(j)[0]) + Math.abs(chicken.get(i)[1] - home.get(j)[1]);
				distance[j] = Math.min(distance[j], x);
			}

			dfs(i, count + 1);
			distance = temp.clone();
		}
	}
}

'코딩테스트 > [백준] 코딩테스트 연습' 카테고리의 다른 글

강의실 배정 - 11000번  (0) 2022.02.28
찾기 - 1786번  (0) 2022.02.24
아기 상어 - 16236번  (0) 2022.02.23
감시 - 15683번  (0) 2022.02.18
빵집 - 3109번  (0) 2022.02.17
    '코딩테스트/[백준] 코딩테스트 연습' 카테고리의 다른 글
    • 강의실 배정 - 11000번
    • 찾기 - 1786번
    • 아기 상어 - 16236번
    • 감시 - 15683번
    쵼쥬
    쵼쥬

    티스토리툴바