삼성 SW 역량 테스트 기출 문제
https://www.acmicpc.net/problem/15686
15686번: 치킨 배달
크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸, 왼쪽에서부터 c번째 칸을 의미한다. r과 c는 1부터 시작한다. 이 도시에 사는 사람들은 치킨을 매우 좋아한다. 따라서, 사람들은 "치킨 거리"라는 말을 주로 사용한다. 치킨 거리는 집과 가장 가까운 치킨집 사이의 거리이다. 즉, 치킨 거리는
www.acmicpc.net


Solution
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from itertools import combinations | |
n, m = map(int, input().split(' ')) | |
maps = [list(map(int, input().split(' '))) for _ in range(n)] | |
home, chicken = [], [] | |
for i in range(n): | |
for j in range(n): | |
if maps[i][j] == 1: | |
home.append((i,j)) | |
elif maps[i][j] == 2: | |
chicken.append((i,j)) | |
ans = 10000 | |
for i in combinations(chicken, m): | |
tmp = 0 | |
for j in home: | |
minVal = 10000 | |
for k in i: | |
distance = abs(k[0] - j[0]) + abs(k[1] - j[1]) | |
minVal = min(minVal, distance) | |
tmp += minVal | |
ans = min(ans, tmp) | |
print(ans) |
문제 유형 : 브루트 포스
난 누가 뭐래도 치킨보단 피자를 선호하지만
제목이 뭔가 귀여워서 풀어봤다.
도시에 있는 치킨집 중에서 M개 씩 조합(itertools의 combinations을 이용했다.)
그리고 고른 치킨집 경우와 각 집과의 거리를 구해서 치킨 거리가 가장 작은 치킨집 조합을 출력한다.

'Algorithm > BOJ' 카테고리의 다른 글
[백준/Python] 14502번 연구소 (0) | 2020.04.15 |
---|---|
[백준/Python] 14891번 톱니바퀴 (0) | 2020.04.11 |
[백준/Python] 17822번 원판 돌리기 (0) | 2020.04.09 |
[백준/Python] 2644번 촌수계산 (0) | 2020.04.09 |
[백준/Python] 17144번 미세먼지 안녕! (0) | 2020.04.09 |
,