SlideShare a Scribd company logo
1 of 13
최단 경로 문제
XeniX
왼쪽 그림은 필자가 대학 입학 시험을 치를 때 나왔던 수학 문제 중 하나이다. A에서
B까지 가는 최단 경로의 수를 구하는 문제인데, 중간에 연못이 있어서 까맣게 표시된 세
점은 지나지 못 한다. (하도 오래 돼서 정확하진 않지만, 대충 이런 유형이었다.)
문제를 보자마자 느꼈던 그 당황스러움이란... 결국 포기하고 다음 문제로 넘어 갔다.
마지막에 답안지를 제출하기 직전에 아쉬움이 남아 다시 손을 댔는데, 용감하게 일일이
세어 나갔다. 열심히 세고 있는데 답안지를 제출하라는 독촉에 그만 포기하고 찍었다.
주관식 단답형 문제였는데, 그 때까지 세었던 수에 대충 어림짐작을 더해 그냥 찍었다.
모든 시험 시간을 마치고 고사장 밖으로 나와 식당에서 밥을 시킨 후 기다리고 있는데,
TV에서 마침 이 문제에 대한 해설을 해주고 있었다. 드디어 답을 알려 주는데, 놀랍게도
막판에 찍어서 낸 답이 맞았다. 처음에는 너무 놀라 눈만 휘둥그레 커졌다가, 결국에는
환호성으로 이어졌다. 식당에 있던 사람의 시선은 온통 나한테 꽂혔지만, 전혀 신경 쓰
이지 않았다.
여태까지 수학을 해 오면서 참 어렵다고 느껴졌던 부분이 몇 가지가 있다. 정수를 다
루는 정수론 문제와 좌표를 쓰지 않고 도형을 해석하는 기하학 문제, 그리고 바로 이 문
제와 같은 경우의 수 문제이다. 아주 오랜 시간이 지나서야 알았지만, 수학 올림피아드
에서 주로 다루는 분야이기도 하다. 번뜩이는(?) 수학적 창의성이 없으면 도저히 접근할
수 없거나, 해당 분야에 대한 최소한의 소양이 없으면 아예 접근을 할 수 없는 경우가
대부분이다. 아니면 이 문제처럼 풀 수는 있지만 아주 많은 노가다(?)를 해야 한다.
정수론이나 기하학 부분은 아주 기초적인 부분만이 문제화되어 나오기 때문에 큰 어려
움이 없는 게 대부분이지만, 경우의 수 부분은 확률과 연계되어 난이도 높은 문제가 심
심찮게 나오기 때문에 이러한 문제에 대한 대응력을 키우기 위해서는 최대한 많은 유형
을 접해 보는 게 좋다.
여기서는 최단 경로 문제의 여러 가지 유형을 다루어 보도록 하겠다.
B
A
2015-01-30
선행 학습 내용
XeniX2
순열 : 서로 다른 𝒏개에서 𝒓개를 선택해서 일렬로 나열하는 경우의 수
𝒏 𝑷 𝒓 =
𝒏!
𝒏 − 𝒓 !
같은 것이 포함된 순열 : 𝒏개 중에 같은 것이 각각 𝒑개, 𝒒개, …, 𝒓개가 있을 때, 𝒏개를 모두 일렬로 나열하는 경우의 수
𝒏!
𝒑! 𝒒! ⋯ 𝒓!
(단, 𝒏 = 𝒑 + 𝒒 + ⋯ + 𝒓)
1-1. 기본 형태: 순열 방식으로 풀기
XeniX3
B
A
A에서 B로 가는 최단 경로의 수를 구하여라.문제
풀이
A에서 B로 최단 경로로 가기 위해서는 어떤 경로로 가든 가로(―)로 4번, 세로(|)로 3번을
가야 한다.
문제를 다른 시각에서 보면, 가로(―)가 4개, 세로(|)가 3개, 총 7개가 있을 때, 이 7개를
나열하는 방법이 몇 가지가 있는가 하는 것이다. 즉, 같은 것이 포함된 순열과 동일하다.
같은 것이 포함된 순열 문제는 아래와 같이 간단하게 풀 수 있다.
𝟕!
𝟒! 𝟑!
=
𝟕 × 𝟔 × 𝟓
𝟑 × 𝟐 × 𝟏
= 𝟑𝟓
이것을 이해 하고 나면 다음과 같은 문제는 계산만 번거로운 문제에 지나지 않을 것이다.
B
A
𝟕!
𝟓! 𝟐!
=
𝟕 × 𝟔
𝟐 × 𝟏
= 𝟐𝟏
B
A
𝟗!
𝟓! 𝟒!
=
𝟗 × 𝟖 × 𝟕 × 𝟔
𝟒 × 𝟑 × 𝟐 × 𝟏
= 𝟏𝟐𝟔
1-2. 기본 형태: 합산 방식으로 풀기
XeniX4
B
A
주의해야 할 점은 숫자를 기입할 교차점까지 거쳐온 가로(―)나 세로(|)의 수가 아니라, 교차점
까지 올 수 있는 경우(방법)의 수를 기입해야 한다는 것이다.
① A와 동일한 가로 선 상의 점들과 세로 선 상의 점들로부터 시작하는 것이 좋다. 거쳐간
길의 수가 아니라 갈 수 있는 방법의 수이므로 전부 1이기 때문이다.
이번에는 동일한 문제를 파스칼의 삼각형에서 쓰였던 방식과 유사하게 풀어 보자. 각각의 교차
점에 여기까지 올 수 있는 최단 경로의 수를 기입하는 방식이다.
① 1
1
B
1
A 1 1 1 1
② 이제 A와 가까운 교차점부터 순서대로 해당 교차점으로 올 수 있는 점들에 있는 수를 합한 값을 기입한다. 이 수는 합
의 법칙에 의해 해당 교차점으로 올 수 있는 경우의 수가 된다.
② 1
1 3
B
1 2 3
A 1 1 1 1
③ B에 도착할 때까지 이러한 방법으로 계속해 나가면 답을 얻을 수 있다. ∴ 35 ∎
③ 1 4 10 20 35
1 3 6 10 15
1 2 3 4 5
A 1 1 1 1
1 3 6 10 15 21
1 2 3 4 5 6
A 1 1 1 1 1
1 5 15 35 70 126
1 4 10 20 35 56
1 3 6 10 15 21
1 2 3 4 5 6
A 1 1 1 1 1
앞의 다른 두 문제도 동일한 방식으로 풀어 보자.
2. 중간 기점이 있을 경우
XeniX5
B
C
A
A에서 C를 거쳐 B로 가는 최단 경로의 수를 구하여라.문제
풀이
(순열 방식)
곱의 법칙에 따라 A에서 C로 가는 최단 경로의 수와 C에서 A로 가는 최단 경로의 수를 곱하
면 된다.
∴
𝟑!
𝟐! 𝟏!
×
𝟓!
𝟑! 𝟐!
= 𝟑 ×
𝟓 × 𝟒
𝟐
= 𝟑𝟎
(합산 방식)
곱의 법칙을 적용하지 않고 한 번에 직접 구해도 되고, 곱의 법칙을 적용해서 구해도 된다. (어떤 방식을 써도 결과는 같
지만, 곱의 법칙을 이용하는 경우는 위의 순열 방식으로 계산이 가능하므로, 간단한 검산용으로 사용하길 추천한다.)
0 0 3 12 30
0 0 3 9 18
0 0 3 6 9
1 2 3 3 3
1 1 0 0
A
한 번에 직접 구하기
갈 일이 없는 곳은 0으로
표시하거나 아예 비워 두
는 것이 편하다.
곱의 법칙을 이용하여 구하기
1 4 10
1 3 6
1 2 3
1 2 3 1 1
1 1
A
𝟑 × 𝟏𝟎 = 𝟑𝟎
3. 대각선 경로가 있을 경우
XeniX6
B
P C
Q
A
A에서 C로 갈 수 있는 대각선 경로가 있을 경우, A에서 B로 가는 최단
경로의 수를 구하여라.
문제
풀이
대각선 경로를 이용해 A에서 C로 가는 것은 A에서 P나 Q를 거쳐 C로 가는 것보다
경우의 수가 적다. 따라서, 대각선 경로가 있으면 무조건 그 경로를 따르게 된다.
즉, 이 경우는 A에서 C로는 무조건 가는 것이므로, C에서 B로 가는 최단 경로를
구하는 것과 동일하다.
(순열 방식)
B
C
A
∴
𝟔!
𝟒! 𝟐!
=
𝟔 × 𝟓
𝟐
= 𝟏𝟓
(합산 방식)
C에서 합산할 때만 주의하면 된다. 앞서의 경우에는 P의 수가 1이고 Q의 수가 1
이므로 합해서 2였지만, 대각선으로 A에서 오는 방법이 1이므로 최단 경로 요구
에 따라 C의 수는 가장 짧은 경로에 해당하는 1이 된다.
0 0 1 3 6 10 15
0 0 1 2 3 4 5
P0 0 1 1 1 1 1
A 0 0 0 0 0
Q
헷갈리지 않게 중간 기점이 있을 경우처럼, 가지 않을 경로는 0을 기입하거나 아
예 아래 그림처럼 P에서 시작하는 것이 좋겠다.
1 3 6 10 15
1 2 3 4 5
P 1 1 1 1
A
앞서도 언급했지만, 경로의 길이가 아니라
경로의 수를 구하는 것이므로,
경로의 길이는 전혀 신경 쓸 필요가 없다.
4. 대각선이 중간에 있는 경우
XeniX7
B
D
C
A
경로 중간에 C에서 D로 갈 수 있는 대각선 경로가 있을 경우, A에서 B
로 가는 최단 경로의 수를 구하여라.
문제
원래 예정에는 없었는데 글을 쓰다가 생각
나서 끼워 넣은 문제이다. 2번과 3번을 제
대로 이해했다면 금방 풀 수 있을 것이다.
풀이
중간에 대각선이 있으므로, 최단 경로는 A→C→D→B가 될 것이다. 따라서, 곱의
법칙에 따라 (A→C 최단 경로 수)×(C→D 최단 경로 수(=1))×(D→B 최단 경로수)
를 구하면 된다.
(순열 방식)
𝟓!
𝟑! 𝟐!
× 𝟏 ×
𝟑!
𝟐! 𝟏!
=
𝟓 × 𝟒
𝟐
× 𝟑 = 𝟑𝟎
(합산 방식)
한 번에 직접 구하는 경우와 곱셈 공식을 이용하여 구하는 경우를 각각 표시하면 다음과 같다.
10 20 30
10 10 10
1 3 6 10
1 2 3 4
1 1 1
A
1 2 3
1 1 1
1 3 6 10
1 2 3 4
1 1 1
A
𝟏𝟎 × 𝟏 × 𝟑 = 𝟑𝟎
5. 중간에 끊긴 경로가 하나 있는 경우
XeniX8
B
Q
P
A
경로 중간에 P에서 Q로 가는 길이 막혀서 경로가 끊긴 경우, A에서 B로 가는 최
단 경로의 수를 구하여라.
문제
지금까지는 단순화시키거나, 몇 가지 부분으로 나눈
후 곱의 법칙을 적용하여 문제를 해결할 수 있었다.
지금부터는 전혀 다른 관점의 문제이다.풀이
(순열 방식)
의외로 풀이는 간단하다. A에서 B로 가는 모든 최단 경로의 수에서 P에서 Q의 경로를 거쳐
서 가는 경우의 수를 빼주면 된다.
(A→B) - (A→P→Q→B)
𝟕!
𝟒! 𝟑!
−
𝟑!
𝟐! 𝟏!
× 𝟏 ×
𝟑!
𝟐! 𝟏!
= 𝟑𝟓 − 𝟗 = 𝟐𝟔
(합산 방식)
한 번에 직접 구하기
1 4 7 14 26
1 3 3 7 12
1 2 3 4 5
1 1 1 1
A
(간단하지만 틀리기 쉽다)
곱의 법칙을 이용하여 구하기
1 4 10 20 35
1 3 6 10 15
1 2 3 4 5
1 1 1 1
A
1 2 3
1 1
1 2 3
1 1
A
3𝟓 − 𝟑 × 𝟑 = 𝟐𝟔
(정확하지만 번거롭다)
6. 중간에 끊긴 경로가 여러 개 있는 경우
XeniX9
F B
E
D
A C
경로 중간에 C에서 D로 가는 길과 E에서 F로 가는 길이 막혀서 경로가 끊긴 경우,
A에서 B로 가는 최단 경로의 수를 구하여라.
문제
한 가지 점에만 주의하면, 끊긴 경로가 하
나 있는 경우와 기본적으로 동일하다.풀이
(순열 방식)
5번의 경우처럼, A에서 B로 가는 전체 최단 경로의 수에서, C에서 D의 경로를 거쳐서 가는
경우와 E에서 F를 거쳐서 가는 경우를 빼주면 된다.
단, C에서 D의 경로를 거쳐서 가는 경우와 E에서 F를 거쳐서 가는 경우에는 C에서 D의 경로
와 E에서 F로 가는 경로를 모두 거쳐서 가는 경우가 중복되어 있다.
따라서, 중복되는 경우를 반드시 고려해야 한다.
(A→B) – {(A→C→D→B) + (A→E→F→B) – (A→C→D→E→F→B)}
𝟕!
𝟒! 𝟑!
− 𝟏 × 𝟏 ×
𝟒!
𝟐! 𝟐!
+
𝟒!
𝟐! 𝟐!
× 𝟏 × 𝟏 − 𝟏 × 𝟏 × 𝟏 × 𝟏 × 𝟏 =
𝟕 × 𝟔 × 𝟓
𝟑 × 𝟐 × 𝟏
− (𝟔 + 𝟔 − 𝟏) = 𝟐𝟒
(합산 방식): 검산
1 4 4 12 24
1 3 5 8 12
1 2 2 3 4
1 1 1
A
C에서 D의 경로를 거쳐서 가는 경우: 사건 𝑷
E에서 F의 경로를 거쳐서 가는 경우: 사건 𝑸
C에서 D의 경로와 E에서 F의 경로를 거쳐서 가는 경우:
𝑷 ∩ 𝑸
𝒏 𝑷 ∪ 𝑸 = 𝒏 𝑷 + 𝒏 𝑸 − 𝒏(𝑷 ∩ 𝑸)
7. 응용 문제
XeniX10
(1) B
Q
C
P
A
<풀이>
A에서 C로 가는 최단 경로가 대각선이므로, A에 B로 가
는 최단 경로는 C에서 B로 가는 최단 경로와 같다.
P에서 Q로 가는 경로가 막혀 있으므로, 전체 경우의 수
에서 P에서 Q로 가는 경로가 포함된 경우를 빼준다.
(A→B) ≡ (C→B) - (C→P→Q→B)
∴
𝟔!
𝟒! 𝟐!
− 𝟏 × 𝟏 ×
𝟑!
𝟐! 𝟏!
= 𝟏𝟓 − 𝟑 = 𝟏𝟐 ∎
검산 1 3 5 8 12
1 2 2 3 4
1 1 1 1 1
A
(2)
A→B
A
D
C
B
A→B
C에서 B로 대각선이 있으므로, A에 B로 가는 최단 경로
는 A에서 C로 가는 최단 경로와 같다.
중간의 D로 가는 모든 경로가 막혀 있으므로, 전체 경
우의 수에서 D를 거쳐 C로 가는 경우를 빼줘야 한다.
(A→B) ≡ (A→C) - (A→D→C)
∴
𝟔!
𝟑! 𝟑!
−
𝟒!
𝟐! 𝟐!
×
𝟐!
𝟏! 𝟏!
= 𝟐𝟎 − 𝟏𝟐 = 𝟖 ∎
검산: 문제 오른쪽 그림 참조
A 1 1 1
1 2 3 4
1 3 4
1 4 4 8
8
B
<풀이>
7. 응용 문제 - 계속
XeniX11
(3) B
A
A→B
<풀이>
이 문제를 해결하는 방법은 두 가지가 있겠다.
C D B
E F
A
첫 번째 방법은 아래의 왼쪽 그림처럼 보조선을 그어
직사각형으로 만든 후 푸는 방법이고,
두 번째 방법은 오른쪽 그림처럼 (2×2)의 정사각형이
두 점에서 만나는 것으로 생각해서 푸는 방법이다.
B
P
Q
A
둘 다 가능하지만, 아무래도 점의 수가 적은 두 번째
방법이 편해 보인다.
항상 그렇지만 중복되는 부분에 주의해야 한다.
(A→B) ≡ (A→P→B) + (A→Q→B) – (A→Q→P→B)
∴
𝟒!
𝟐! 𝟐!
×
𝟑!
𝟐! 𝟏!
+
𝟑!
𝟐! 𝟏!
×
𝟒!
𝟐! 𝟐!
−
𝟑!
𝟐! 𝟏!
× 𝟏 ×
𝟑!
𝟐! 𝟏!
= 𝟐𝟕 ∎
검산
6 15 27
1 3 6 9 12
1 2 3 3 3
1 1
A
8. 마무리
XeniX12
B
Q R
P
A
서두에 이왕 언급한 문제이니, 마무리로 풀어보도록 하자.
A에서 B로 가는 최단 경로의 수를 구하여라. 중간에는 연못이 있어서 P, Q, R의
세 점은 지날 수 없다.
문제
풀이
A에서 P를 거쳐 B로 가는 경우를 사건 𝒑, A에서 Q를 거쳐 B로 가는 경우를 사건 𝒒, A에서
R을 거쳐 B로 가는 경우를 사건 𝒓이라고 하자.
세 가지 사건을 함께 고려하는 경우이므로 중복된 경우를 고려하는 방식이 좀 복잡하다.
𝒏 𝒑 ∪ 𝒒 ∪ 𝒓 = 𝒏 𝒑 + 𝒏 𝒒 + 𝒏 𝒓 − 𝒏 𝒑 ∩ 𝒒 − 𝒏 𝒒 ∩ 𝒓 − 𝒏 𝒓 ∩ 𝒑 + 𝒏(𝒑 ∩ 𝒒 ∩ 𝒓)
𝒑와 𝒒, 𝒒와 𝒓, 𝒓과 𝒑 각각이 중복된 경우를 빼주다 보면 세 가지가 모두 중복되는 경우를
두 번 빼주게 되므로, 다시 더해 주어야 한다는 뜻이다.
위 식은 P나 Q나 R을 지나는 경우의 수이므로, 우리가 구하고자 하는 최단 경로의 수는 다음과 같이 된다.
(A→B)의 총수 – {(A→P→B) + (A→Q→B) + (A→R→B) - (A→P→Q→B) - (A→Q→R→B) - (A→P→R→B) + (A→P→Q→R→B)}
(A→B)의 총수 =
𝟗!
𝟓! 𝟒!
= 𝟏𝟐𝟔 (A→P→B) =
𝟓!
𝟑! 𝟐!
×
𝟒!
𝟐! 𝟐!
= 𝟔𝟎
(A→Q→B) =
𝟔!
𝟒! 𝟐!
×
𝟑!
𝟐! 𝟏!
= 𝟒𝟓 (A→R→B) =
𝟕!
𝟒! 𝟑!
×
𝟐!
𝟏! 𝟏!
= 𝟕𝟎
(A→P→Q→B) =
𝟓!
𝟑! 𝟐!
× 𝟏 ×
𝟑!
𝟐! 𝟏!
= 𝟑𝟎 (A→Q→R→B) =
𝟔!
𝟒! 𝟐!
× 𝟏 ×
𝟐!
𝟏! 𝟏!
= 𝟑𝟎
(A→P→R→B) =
𝟓!
𝟑! 𝟐!
×
𝟐!
𝟏! 𝟏!
×
𝟐!
𝟏! 𝟏!
= 𝟒𝟎 (A→P→Q→R→B)=
𝟓!
𝟑! 𝟐!
× 𝟏 × 𝟏 × 𝟏 ×
𝟐!
𝟏! 𝟏!
= 𝟐𝟎
∴ 𝟏𝟐𝟔 − 𝟔𝟎 + 𝟒𝟓 + 𝟕𝟎 − 𝟑𝟎 + 𝟑𝟎 + 𝟒𝟎 + 𝟐𝟎 = 𝟑𝟏 ∎
1 6 6 6 31
1 5 25
1 4 10 25
1 3 6 10 15
1 2 3 4 5
1 1 1 1
A
마치면서…
XeniX13
사실 글을 쓰기 시작할 때 서두에 제시한 문제를 마
지막에 풀면서 마쳐야겠다는 생각을 가지고 있었다. 그
렇지만, 순열 방식으로 구한 답이 합산 방식으로 구한
답과 일치하지 않아서 한 동안 매우 곤혹스러웠다.
합산 방식은 생각지도 못 하게 워낙 간단해서, 아무
리 눈 씻고 몇 번을 다시 들여다 보아도 틀린 부분이
안 보였다. 결국은 순열 방식의 풀이가 틀렸다는 것인
데, 좀처럼 어디가 잘못되었는지 찾지 못 했다.
그러다 ‘아차!’하면서 틀린 부분이 떠올랐다. 앞의
풀이에도 나오는 𝒏(𝑷 ∩ 𝑸 ∩ 𝑹) 부분을 더해주는 것을 빠
트렸던 것이다. 세 집합의 원소의 개수를 구하는 공식
을 뻔히 알고 있음에도, 실제 문제 풀이에 적용하지 못
한 스스로가 한심스러웠다.
그러면서 때로는 복잡하지만 때로는 단순하게 아무런
생각 없이 답을 구할 수 있는 합산 방식을 뻔히 눈 앞
에 두고, 골치 아픈 순열 접근 방식을 굳이 병행하려는
자신이 의아했다.
답은 이미 질문 안에 있었다. 합산 방식은 편리하지
만, 경우의 수를 통해 우리가 달성하고자 하는 접근 방
식이나 사고 방식을 길러주지 못하기 때문이다. 이러한
이유로, 파스칼의 삼각형을 응용한 합산 방식은 물론
유용하고 중요한 기법임은 분명하지만, 수학적 사고 수
준을 측정하고자 하는 논술 등의 경우에는 적절한 방법
이 아닐 것 같다.
이 글에서 제시한 몇몇 유형과 문제를 공식처럼 외워
서 활용하려는 사람들이 주변에 많이 있을 것이다. 그
러나, 이런 방식은 절대 좋은 방법이 아니라고 말해 주
고
싶다.
문제 해결을 위해, 우리가 알고 있는 기본적인 내용
은 무엇이며, 해결의 실마리를 찾기 위한 접근 방식을
어떻게 취할 것이며, 어떤 부분을 쪼개어 생각하고 어
떤 부분을 합쳐서 생각할 것인지 등을 시간이 주어진
한도 내에서 고민해 보는 것이 중요하다는 것을 말해
주고 싶다. 그게 힘들다면 대학 입시 준비 시절의 나처
럼 경우의 수 부분은 과감히 포기하는 것도 좋을 것이
다.
단지 최단 경로 문제를 접했을 뿐인데, 머리가 지끈
지끈 쑤신다. 앞으로 다른 부분은 어떻게 써야 할 지
벌써부터 걱정이다. 이 글을 쓰는 덕분에 머리 회전 한
번 제대로 시킨 모양이다. 이제 커피나 한 잔 하면서
쉬어야겠다.

More Related Content

Similar to 각론 최단경로문제

[KAIST - RUN] 프로그래밍 경진대회 문제 풀이
[KAIST - RUN] 프로그래밍 경진대회 문제 풀이[KAIST - RUN] 프로그래밍 경진대회 문제 풀이
[KAIST - RUN] 프로그래밍 경진대회 문제 풀이NAVER D2
 
2019 경인지역 6개대학 연합 프로그래밍 경시대회 shake! 풀이
2019 경인지역 6개대학 연합 프로그래밍 경시대회 shake! 풀이2019 경인지역 6개대학 연합 프로그래밍 경시대회 shake! 풀이
2019 경인지역 6개대학 연합 프로그래밍 경시대회 shake! 풀이현정 김
 
선형대수 05. 열벡터공간
선형대수 05. 열벡터공간선형대수 05. 열벡터공간
선형대수 05. 열벡터공간AHRA CHO
 
Ray-triangle intersection
Ray-triangle intersectionRay-triangle intersection
Ray-triangle intersection동환 김
 
이산치수학 Project3
이산치수학 Project3이산치수학 Project3
이산치수학 Project3KoChungWook
 
3 sat with randomization
3 sat with randomization3 sat with randomization
3 sat with randomizationChangki Yun
 
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 풀이
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 풀이KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 풀이
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 풀이NAVER D2
 

Similar to 각론 최단경로문제 (7)

[KAIST - RUN] 프로그래밍 경진대회 문제 풀이
[KAIST - RUN] 프로그래밍 경진대회 문제 풀이[KAIST - RUN] 프로그래밍 경진대회 문제 풀이
[KAIST - RUN] 프로그래밍 경진대회 문제 풀이
 
2019 경인지역 6개대학 연합 프로그래밍 경시대회 shake! 풀이
2019 경인지역 6개대학 연합 프로그래밍 경시대회 shake! 풀이2019 경인지역 6개대학 연합 프로그래밍 경시대회 shake! 풀이
2019 경인지역 6개대학 연합 프로그래밍 경시대회 shake! 풀이
 
선형대수 05. 열벡터공간
선형대수 05. 열벡터공간선형대수 05. 열벡터공간
선형대수 05. 열벡터공간
 
Ray-triangle intersection
Ray-triangle intersectionRay-triangle intersection
Ray-triangle intersection
 
이산치수학 Project3
이산치수학 Project3이산치수학 Project3
이산치수학 Project3
 
3 sat with randomization
3 sat with randomization3 sat with randomization
3 sat with randomization
 
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 풀이
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 풀이KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 풀이
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 풀이
 

각론 최단경로문제

  • 1. 최단 경로 문제 XeniX 왼쪽 그림은 필자가 대학 입학 시험을 치를 때 나왔던 수학 문제 중 하나이다. A에서 B까지 가는 최단 경로의 수를 구하는 문제인데, 중간에 연못이 있어서 까맣게 표시된 세 점은 지나지 못 한다. (하도 오래 돼서 정확하진 않지만, 대충 이런 유형이었다.) 문제를 보자마자 느꼈던 그 당황스러움이란... 결국 포기하고 다음 문제로 넘어 갔다. 마지막에 답안지를 제출하기 직전에 아쉬움이 남아 다시 손을 댔는데, 용감하게 일일이 세어 나갔다. 열심히 세고 있는데 답안지를 제출하라는 독촉에 그만 포기하고 찍었다. 주관식 단답형 문제였는데, 그 때까지 세었던 수에 대충 어림짐작을 더해 그냥 찍었다. 모든 시험 시간을 마치고 고사장 밖으로 나와 식당에서 밥을 시킨 후 기다리고 있는데, TV에서 마침 이 문제에 대한 해설을 해주고 있었다. 드디어 답을 알려 주는데, 놀랍게도 막판에 찍어서 낸 답이 맞았다. 처음에는 너무 놀라 눈만 휘둥그레 커졌다가, 결국에는 환호성으로 이어졌다. 식당에 있던 사람의 시선은 온통 나한테 꽂혔지만, 전혀 신경 쓰 이지 않았다. 여태까지 수학을 해 오면서 참 어렵다고 느껴졌던 부분이 몇 가지가 있다. 정수를 다 루는 정수론 문제와 좌표를 쓰지 않고 도형을 해석하는 기하학 문제, 그리고 바로 이 문 제와 같은 경우의 수 문제이다. 아주 오랜 시간이 지나서야 알았지만, 수학 올림피아드 에서 주로 다루는 분야이기도 하다. 번뜩이는(?) 수학적 창의성이 없으면 도저히 접근할 수 없거나, 해당 분야에 대한 최소한의 소양이 없으면 아예 접근을 할 수 없는 경우가 대부분이다. 아니면 이 문제처럼 풀 수는 있지만 아주 많은 노가다(?)를 해야 한다. 정수론이나 기하학 부분은 아주 기초적인 부분만이 문제화되어 나오기 때문에 큰 어려 움이 없는 게 대부분이지만, 경우의 수 부분은 확률과 연계되어 난이도 높은 문제가 심 심찮게 나오기 때문에 이러한 문제에 대한 대응력을 키우기 위해서는 최대한 많은 유형 을 접해 보는 게 좋다. 여기서는 최단 경로 문제의 여러 가지 유형을 다루어 보도록 하겠다. B A 2015-01-30
  • 2. 선행 학습 내용 XeniX2 순열 : 서로 다른 𝒏개에서 𝒓개를 선택해서 일렬로 나열하는 경우의 수 𝒏 𝑷 𝒓 = 𝒏! 𝒏 − 𝒓 ! 같은 것이 포함된 순열 : 𝒏개 중에 같은 것이 각각 𝒑개, 𝒒개, …, 𝒓개가 있을 때, 𝒏개를 모두 일렬로 나열하는 경우의 수 𝒏! 𝒑! 𝒒! ⋯ 𝒓! (단, 𝒏 = 𝒑 + 𝒒 + ⋯ + 𝒓)
  • 3. 1-1. 기본 형태: 순열 방식으로 풀기 XeniX3 B A A에서 B로 가는 최단 경로의 수를 구하여라.문제 풀이 A에서 B로 최단 경로로 가기 위해서는 어떤 경로로 가든 가로(―)로 4번, 세로(|)로 3번을 가야 한다. 문제를 다른 시각에서 보면, 가로(―)가 4개, 세로(|)가 3개, 총 7개가 있을 때, 이 7개를 나열하는 방법이 몇 가지가 있는가 하는 것이다. 즉, 같은 것이 포함된 순열과 동일하다. 같은 것이 포함된 순열 문제는 아래와 같이 간단하게 풀 수 있다. 𝟕! 𝟒! 𝟑! = 𝟕 × 𝟔 × 𝟓 𝟑 × 𝟐 × 𝟏 = 𝟑𝟓 이것을 이해 하고 나면 다음과 같은 문제는 계산만 번거로운 문제에 지나지 않을 것이다. B A 𝟕! 𝟓! 𝟐! = 𝟕 × 𝟔 𝟐 × 𝟏 = 𝟐𝟏 B A 𝟗! 𝟓! 𝟒! = 𝟗 × 𝟖 × 𝟕 × 𝟔 𝟒 × 𝟑 × 𝟐 × 𝟏 = 𝟏𝟐𝟔
  • 4. 1-2. 기본 형태: 합산 방식으로 풀기 XeniX4 B A 주의해야 할 점은 숫자를 기입할 교차점까지 거쳐온 가로(―)나 세로(|)의 수가 아니라, 교차점 까지 올 수 있는 경우(방법)의 수를 기입해야 한다는 것이다. ① A와 동일한 가로 선 상의 점들과 세로 선 상의 점들로부터 시작하는 것이 좋다. 거쳐간 길의 수가 아니라 갈 수 있는 방법의 수이므로 전부 1이기 때문이다. 이번에는 동일한 문제를 파스칼의 삼각형에서 쓰였던 방식과 유사하게 풀어 보자. 각각의 교차 점에 여기까지 올 수 있는 최단 경로의 수를 기입하는 방식이다. ① 1 1 B 1 A 1 1 1 1 ② 이제 A와 가까운 교차점부터 순서대로 해당 교차점으로 올 수 있는 점들에 있는 수를 합한 값을 기입한다. 이 수는 합 의 법칙에 의해 해당 교차점으로 올 수 있는 경우의 수가 된다. ② 1 1 3 B 1 2 3 A 1 1 1 1 ③ B에 도착할 때까지 이러한 방법으로 계속해 나가면 답을 얻을 수 있다. ∴ 35 ∎ ③ 1 4 10 20 35 1 3 6 10 15 1 2 3 4 5 A 1 1 1 1 1 3 6 10 15 21 1 2 3 4 5 6 A 1 1 1 1 1 1 5 15 35 70 126 1 4 10 20 35 56 1 3 6 10 15 21 1 2 3 4 5 6 A 1 1 1 1 1 앞의 다른 두 문제도 동일한 방식으로 풀어 보자.
  • 5. 2. 중간 기점이 있을 경우 XeniX5 B C A A에서 C를 거쳐 B로 가는 최단 경로의 수를 구하여라.문제 풀이 (순열 방식) 곱의 법칙에 따라 A에서 C로 가는 최단 경로의 수와 C에서 A로 가는 최단 경로의 수를 곱하 면 된다. ∴ 𝟑! 𝟐! 𝟏! × 𝟓! 𝟑! 𝟐! = 𝟑 × 𝟓 × 𝟒 𝟐 = 𝟑𝟎 (합산 방식) 곱의 법칙을 적용하지 않고 한 번에 직접 구해도 되고, 곱의 법칙을 적용해서 구해도 된다. (어떤 방식을 써도 결과는 같 지만, 곱의 법칙을 이용하는 경우는 위의 순열 방식으로 계산이 가능하므로, 간단한 검산용으로 사용하길 추천한다.) 0 0 3 12 30 0 0 3 9 18 0 0 3 6 9 1 2 3 3 3 1 1 0 0 A 한 번에 직접 구하기 갈 일이 없는 곳은 0으로 표시하거나 아예 비워 두 는 것이 편하다. 곱의 법칙을 이용하여 구하기 1 4 10 1 3 6 1 2 3 1 2 3 1 1 1 1 A 𝟑 × 𝟏𝟎 = 𝟑𝟎
  • 6. 3. 대각선 경로가 있을 경우 XeniX6 B P C Q A A에서 C로 갈 수 있는 대각선 경로가 있을 경우, A에서 B로 가는 최단 경로의 수를 구하여라. 문제 풀이 대각선 경로를 이용해 A에서 C로 가는 것은 A에서 P나 Q를 거쳐 C로 가는 것보다 경우의 수가 적다. 따라서, 대각선 경로가 있으면 무조건 그 경로를 따르게 된다. 즉, 이 경우는 A에서 C로는 무조건 가는 것이므로, C에서 B로 가는 최단 경로를 구하는 것과 동일하다. (순열 방식) B C A ∴ 𝟔! 𝟒! 𝟐! = 𝟔 × 𝟓 𝟐 = 𝟏𝟓 (합산 방식) C에서 합산할 때만 주의하면 된다. 앞서의 경우에는 P의 수가 1이고 Q의 수가 1 이므로 합해서 2였지만, 대각선으로 A에서 오는 방법이 1이므로 최단 경로 요구 에 따라 C의 수는 가장 짧은 경로에 해당하는 1이 된다. 0 0 1 3 6 10 15 0 0 1 2 3 4 5 P0 0 1 1 1 1 1 A 0 0 0 0 0 Q 헷갈리지 않게 중간 기점이 있을 경우처럼, 가지 않을 경로는 0을 기입하거나 아 예 아래 그림처럼 P에서 시작하는 것이 좋겠다. 1 3 6 10 15 1 2 3 4 5 P 1 1 1 1 A 앞서도 언급했지만, 경로의 길이가 아니라 경로의 수를 구하는 것이므로, 경로의 길이는 전혀 신경 쓸 필요가 없다.
  • 7. 4. 대각선이 중간에 있는 경우 XeniX7 B D C A 경로 중간에 C에서 D로 갈 수 있는 대각선 경로가 있을 경우, A에서 B 로 가는 최단 경로의 수를 구하여라. 문제 원래 예정에는 없었는데 글을 쓰다가 생각 나서 끼워 넣은 문제이다. 2번과 3번을 제 대로 이해했다면 금방 풀 수 있을 것이다. 풀이 중간에 대각선이 있으므로, 최단 경로는 A→C→D→B가 될 것이다. 따라서, 곱의 법칙에 따라 (A→C 최단 경로 수)×(C→D 최단 경로 수(=1))×(D→B 최단 경로수) 를 구하면 된다. (순열 방식) 𝟓! 𝟑! 𝟐! × 𝟏 × 𝟑! 𝟐! 𝟏! = 𝟓 × 𝟒 𝟐 × 𝟑 = 𝟑𝟎 (합산 방식) 한 번에 직접 구하는 경우와 곱셈 공식을 이용하여 구하는 경우를 각각 표시하면 다음과 같다. 10 20 30 10 10 10 1 3 6 10 1 2 3 4 1 1 1 A 1 2 3 1 1 1 1 3 6 10 1 2 3 4 1 1 1 A 𝟏𝟎 × 𝟏 × 𝟑 = 𝟑𝟎
  • 8. 5. 중간에 끊긴 경로가 하나 있는 경우 XeniX8 B Q P A 경로 중간에 P에서 Q로 가는 길이 막혀서 경로가 끊긴 경우, A에서 B로 가는 최 단 경로의 수를 구하여라. 문제 지금까지는 단순화시키거나, 몇 가지 부분으로 나눈 후 곱의 법칙을 적용하여 문제를 해결할 수 있었다. 지금부터는 전혀 다른 관점의 문제이다.풀이 (순열 방식) 의외로 풀이는 간단하다. A에서 B로 가는 모든 최단 경로의 수에서 P에서 Q의 경로를 거쳐 서 가는 경우의 수를 빼주면 된다. (A→B) - (A→P→Q→B) 𝟕! 𝟒! 𝟑! − 𝟑! 𝟐! 𝟏! × 𝟏 × 𝟑! 𝟐! 𝟏! = 𝟑𝟓 − 𝟗 = 𝟐𝟔 (합산 방식) 한 번에 직접 구하기 1 4 7 14 26 1 3 3 7 12 1 2 3 4 5 1 1 1 1 A (간단하지만 틀리기 쉽다) 곱의 법칙을 이용하여 구하기 1 4 10 20 35 1 3 6 10 15 1 2 3 4 5 1 1 1 1 A 1 2 3 1 1 1 2 3 1 1 A 3𝟓 − 𝟑 × 𝟑 = 𝟐𝟔 (정확하지만 번거롭다)
  • 9. 6. 중간에 끊긴 경로가 여러 개 있는 경우 XeniX9 F B E D A C 경로 중간에 C에서 D로 가는 길과 E에서 F로 가는 길이 막혀서 경로가 끊긴 경우, A에서 B로 가는 최단 경로의 수를 구하여라. 문제 한 가지 점에만 주의하면, 끊긴 경로가 하 나 있는 경우와 기본적으로 동일하다.풀이 (순열 방식) 5번의 경우처럼, A에서 B로 가는 전체 최단 경로의 수에서, C에서 D의 경로를 거쳐서 가는 경우와 E에서 F를 거쳐서 가는 경우를 빼주면 된다. 단, C에서 D의 경로를 거쳐서 가는 경우와 E에서 F를 거쳐서 가는 경우에는 C에서 D의 경로 와 E에서 F로 가는 경로를 모두 거쳐서 가는 경우가 중복되어 있다. 따라서, 중복되는 경우를 반드시 고려해야 한다. (A→B) – {(A→C→D→B) + (A→E→F→B) – (A→C→D→E→F→B)} 𝟕! 𝟒! 𝟑! − 𝟏 × 𝟏 × 𝟒! 𝟐! 𝟐! + 𝟒! 𝟐! 𝟐! × 𝟏 × 𝟏 − 𝟏 × 𝟏 × 𝟏 × 𝟏 × 𝟏 = 𝟕 × 𝟔 × 𝟓 𝟑 × 𝟐 × 𝟏 − (𝟔 + 𝟔 − 𝟏) = 𝟐𝟒 (합산 방식): 검산 1 4 4 12 24 1 3 5 8 12 1 2 2 3 4 1 1 1 A C에서 D의 경로를 거쳐서 가는 경우: 사건 𝑷 E에서 F의 경로를 거쳐서 가는 경우: 사건 𝑸 C에서 D의 경로와 E에서 F의 경로를 거쳐서 가는 경우: 𝑷 ∩ 𝑸 𝒏 𝑷 ∪ 𝑸 = 𝒏 𝑷 + 𝒏 𝑸 − 𝒏(𝑷 ∩ 𝑸)
  • 10. 7. 응용 문제 XeniX10 (1) B Q C P A <풀이> A에서 C로 가는 최단 경로가 대각선이므로, A에 B로 가 는 최단 경로는 C에서 B로 가는 최단 경로와 같다. P에서 Q로 가는 경로가 막혀 있으므로, 전체 경우의 수 에서 P에서 Q로 가는 경로가 포함된 경우를 빼준다. (A→B) ≡ (C→B) - (C→P→Q→B) ∴ 𝟔! 𝟒! 𝟐! − 𝟏 × 𝟏 × 𝟑! 𝟐! 𝟏! = 𝟏𝟓 − 𝟑 = 𝟏𝟐 ∎ 검산 1 3 5 8 12 1 2 2 3 4 1 1 1 1 1 A (2) A→B A D C B A→B C에서 B로 대각선이 있으므로, A에 B로 가는 최단 경로 는 A에서 C로 가는 최단 경로와 같다. 중간의 D로 가는 모든 경로가 막혀 있으므로, 전체 경 우의 수에서 D를 거쳐 C로 가는 경우를 빼줘야 한다. (A→B) ≡ (A→C) - (A→D→C) ∴ 𝟔! 𝟑! 𝟑! − 𝟒! 𝟐! 𝟐! × 𝟐! 𝟏! 𝟏! = 𝟐𝟎 − 𝟏𝟐 = 𝟖 ∎ 검산: 문제 오른쪽 그림 참조 A 1 1 1 1 2 3 4 1 3 4 1 4 4 8 8 B <풀이>
  • 11. 7. 응용 문제 - 계속 XeniX11 (3) B A A→B <풀이> 이 문제를 해결하는 방법은 두 가지가 있겠다. C D B E F A 첫 번째 방법은 아래의 왼쪽 그림처럼 보조선을 그어 직사각형으로 만든 후 푸는 방법이고, 두 번째 방법은 오른쪽 그림처럼 (2×2)의 정사각형이 두 점에서 만나는 것으로 생각해서 푸는 방법이다. B P Q A 둘 다 가능하지만, 아무래도 점의 수가 적은 두 번째 방법이 편해 보인다. 항상 그렇지만 중복되는 부분에 주의해야 한다. (A→B) ≡ (A→P→B) + (A→Q→B) – (A→Q→P→B) ∴ 𝟒! 𝟐! 𝟐! × 𝟑! 𝟐! 𝟏! + 𝟑! 𝟐! 𝟏! × 𝟒! 𝟐! 𝟐! − 𝟑! 𝟐! 𝟏! × 𝟏 × 𝟑! 𝟐! 𝟏! = 𝟐𝟕 ∎ 검산 6 15 27 1 3 6 9 12 1 2 3 3 3 1 1 A
  • 12. 8. 마무리 XeniX12 B Q R P A 서두에 이왕 언급한 문제이니, 마무리로 풀어보도록 하자. A에서 B로 가는 최단 경로의 수를 구하여라. 중간에는 연못이 있어서 P, Q, R의 세 점은 지날 수 없다. 문제 풀이 A에서 P를 거쳐 B로 가는 경우를 사건 𝒑, A에서 Q를 거쳐 B로 가는 경우를 사건 𝒒, A에서 R을 거쳐 B로 가는 경우를 사건 𝒓이라고 하자. 세 가지 사건을 함께 고려하는 경우이므로 중복된 경우를 고려하는 방식이 좀 복잡하다. 𝒏 𝒑 ∪ 𝒒 ∪ 𝒓 = 𝒏 𝒑 + 𝒏 𝒒 + 𝒏 𝒓 − 𝒏 𝒑 ∩ 𝒒 − 𝒏 𝒒 ∩ 𝒓 − 𝒏 𝒓 ∩ 𝒑 + 𝒏(𝒑 ∩ 𝒒 ∩ 𝒓) 𝒑와 𝒒, 𝒒와 𝒓, 𝒓과 𝒑 각각이 중복된 경우를 빼주다 보면 세 가지가 모두 중복되는 경우를 두 번 빼주게 되므로, 다시 더해 주어야 한다는 뜻이다. 위 식은 P나 Q나 R을 지나는 경우의 수이므로, 우리가 구하고자 하는 최단 경로의 수는 다음과 같이 된다. (A→B)의 총수 – {(A→P→B) + (A→Q→B) + (A→R→B) - (A→P→Q→B) - (A→Q→R→B) - (A→P→R→B) + (A→P→Q→R→B)} (A→B)의 총수 = 𝟗! 𝟓! 𝟒! = 𝟏𝟐𝟔 (A→P→B) = 𝟓! 𝟑! 𝟐! × 𝟒! 𝟐! 𝟐! = 𝟔𝟎 (A→Q→B) = 𝟔! 𝟒! 𝟐! × 𝟑! 𝟐! 𝟏! = 𝟒𝟓 (A→R→B) = 𝟕! 𝟒! 𝟑! × 𝟐! 𝟏! 𝟏! = 𝟕𝟎 (A→P→Q→B) = 𝟓! 𝟑! 𝟐! × 𝟏 × 𝟑! 𝟐! 𝟏! = 𝟑𝟎 (A→Q→R→B) = 𝟔! 𝟒! 𝟐! × 𝟏 × 𝟐! 𝟏! 𝟏! = 𝟑𝟎 (A→P→R→B) = 𝟓! 𝟑! 𝟐! × 𝟐! 𝟏! 𝟏! × 𝟐! 𝟏! 𝟏! = 𝟒𝟎 (A→P→Q→R→B)= 𝟓! 𝟑! 𝟐! × 𝟏 × 𝟏 × 𝟏 × 𝟐! 𝟏! 𝟏! = 𝟐𝟎 ∴ 𝟏𝟐𝟔 − 𝟔𝟎 + 𝟒𝟓 + 𝟕𝟎 − 𝟑𝟎 + 𝟑𝟎 + 𝟒𝟎 + 𝟐𝟎 = 𝟑𝟏 ∎ 1 6 6 6 31 1 5 25 1 4 10 25 1 3 6 10 15 1 2 3 4 5 1 1 1 1 A
  • 13. 마치면서… XeniX13 사실 글을 쓰기 시작할 때 서두에 제시한 문제를 마 지막에 풀면서 마쳐야겠다는 생각을 가지고 있었다. 그 렇지만, 순열 방식으로 구한 답이 합산 방식으로 구한 답과 일치하지 않아서 한 동안 매우 곤혹스러웠다. 합산 방식은 생각지도 못 하게 워낙 간단해서, 아무 리 눈 씻고 몇 번을 다시 들여다 보아도 틀린 부분이 안 보였다. 결국은 순열 방식의 풀이가 틀렸다는 것인 데, 좀처럼 어디가 잘못되었는지 찾지 못 했다. 그러다 ‘아차!’하면서 틀린 부분이 떠올랐다. 앞의 풀이에도 나오는 𝒏(𝑷 ∩ 𝑸 ∩ 𝑹) 부분을 더해주는 것을 빠 트렸던 것이다. 세 집합의 원소의 개수를 구하는 공식 을 뻔히 알고 있음에도, 실제 문제 풀이에 적용하지 못 한 스스로가 한심스러웠다. 그러면서 때로는 복잡하지만 때로는 단순하게 아무런 생각 없이 답을 구할 수 있는 합산 방식을 뻔히 눈 앞 에 두고, 골치 아픈 순열 접근 방식을 굳이 병행하려는 자신이 의아했다. 답은 이미 질문 안에 있었다. 합산 방식은 편리하지 만, 경우의 수를 통해 우리가 달성하고자 하는 접근 방 식이나 사고 방식을 길러주지 못하기 때문이다. 이러한 이유로, 파스칼의 삼각형을 응용한 합산 방식은 물론 유용하고 중요한 기법임은 분명하지만, 수학적 사고 수 준을 측정하고자 하는 논술 등의 경우에는 적절한 방법 이 아닐 것 같다. 이 글에서 제시한 몇몇 유형과 문제를 공식처럼 외워 서 활용하려는 사람들이 주변에 많이 있을 것이다. 그 러나, 이런 방식은 절대 좋은 방법이 아니라고 말해 주 고 싶다. 문제 해결을 위해, 우리가 알고 있는 기본적인 내용 은 무엇이며, 해결의 실마리를 찾기 위한 접근 방식을 어떻게 취할 것이며, 어떤 부분을 쪼개어 생각하고 어 떤 부분을 합쳐서 생각할 것인지 등을 시간이 주어진 한도 내에서 고민해 보는 것이 중요하다는 것을 말해 주고 싶다. 그게 힘들다면 대학 입시 준비 시절의 나처 럼 경우의 수 부분은 과감히 포기하는 것도 좋을 것이 다. 단지 최단 경로 문제를 접했을 뿐인데, 머리가 지끈 지끈 쑤신다. 앞으로 다른 부분은 어떻게 써야 할 지 벌써부터 걱정이다. 이 글을 쓰는 덕분에 머리 회전 한 번 제대로 시킨 모양이다. 이제 커피나 한 잔 하면서 쉬어야겠다.