티스토리 뷰

PS/백준

[백준] 15686 치킨 배달

HUN 2021. 3. 12. 11:10


도시에 존재하는 치킨 집을 M개 만큼 남기는 경우의 수 중 최소 치킨 거리를 구하는 문제이다. 

 

모든 치킨 집 중 M개를 뽑는 조합을 구하면 쉽게 답이 도출된다.

 

다만 나는 시간 초과로 인해 조금 헤매었다. 그 이유는 지금까지 조합과 순열에 대한 차이를 인지하면서 알고리즘을 작성하지 않았던기 때문이다. 

 

조합은 순서를 무시하기 때문에 [1, 2]와 [2, 1] 동일하다. 즉 [(1, 2), (3, 2)]에 위치한 치킨 집을 폐업 시키는 경우와 [(3, 2), (1, 2)]에 위치한 치킨 집을 폐업 시키는 경우가 동일한 것이다. 이러한 문제에 순열 알고리즘을 사용하였으니 시간초과가 발생하는 것이 당연한 것이었다.

순열과 조합 알고리즘의 간단한 예시는 아래와 같다.

# 순열

li = [1, 2, 3, 4, 5, 6]
M = 4

def dfs(result):
    if len(result) == M:
        return
    print(result)
    for l in li:
        dfs(result + [l])
dfs([])
# 조합

li = [1, 2, 3, 4, 5, 6]
M = 4

def dfs(idx, result):
    if idx >= len(li): return
    if len(result) == M:
        return
    print(result)
    dfs(idx+1, result + [li[idx]])
    dfs(idx+1, result)

dfs(0, [])

 

Python

 

728x90

'PS > 백준' 카테고리의 다른 글

[백준] 16236 아기 상어  (0) 2021.03.14
[백준] 16235 나무 재테크  (0) 2021.03.12
[백준] 15685 드래곤 커브  (0) 2021.03.11
[백준] 15684 사다리 조작  (0) 2021.03.10
[백준] 15683 감시  (0) 2021.03.09
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함