나뭇잎 교과서

컴퓨터과학으로 풀 문제 발견

잔반, 등굣길, 시간표, 동물 찻길 사고처럼 주변의 불편함 가운데에는 지금까지 배운 탐색, 동적 계획법, 그래프로 풀 수 있는 것이 많습니다. 프로젝트는 그런 문제를 발견하는 데서 시작합니다.

먼저 알면 좋은 것 알고리즘 설계 방법자료 구조
본문

컴퓨터과학으로 풀 문제 발견

본문

학교 급식 센터의 배달 차가 날마다 근처 학교 열 곳에 들렀다가 돌아온다. 운전기사는 늘 같은 순서로 다니지만, 순서를 바꾸면 더 짧게 다닐 수 있을 것 같다. 이 불편함은 컴퓨터과학으로 풀 수 있는 문제일까? 열 곳의 순서를 모두 따져 보면 확실한 답이 나오겠지만, 그 순서는 몇 가지이고 시간은 얼마나 걸릴까? 들를 곳이 스무 곳이라면 어떻게 될까? 주변에서 문제를 찾았을 때 먼저 무엇을 따져야 할까?

그림 1. 출발점에서 k곳을 모두 한 번씩 들르고 돌아오는 순서의 수(방향을 거꾸로 돈 것은 같은 경로로 침)와, 가장 가까운 곳부터 들르는 어림 방법의 계산량(막대는 로그 길이).
먼저 알아야 할 것상태 공간 완전 탐색(상태 공간 완전 탐색), 빅오 표기법(빅오 표기법과 복잡도), 그래프(트리와 그래프의 구현).

4.1.1불편함을 문제로 바꾸기

프로젝트는 주변의 불편함을 컴퓨터가 풀 수 있는 문제로 바꾸는 데서 시작한다. 그러려면 입력과 출력, 목표를 분명히 정한다. 배달 순서 문제라면 입력은 학교들 사이의 거리 표이고, 출력은 들르는 순서이며, 목표는 전체 거리를 가장 짧게 하는 것이다. 이렇게 정하면 이 문제가 그래프에서 모든 정점을 한 번씩 지나 돌아오는 가장 짧은 경로를 찾는 문제, 곧 외판원 문제임을 알 수 있다. 이미 알려진 문제 꼴로 바꾸면, 그 문제에 쓰이는 방법과 그 한계를 빌려 올 수 있다.

정리 4.1.1 순회 경로의 수

출발점에서 \(k\)곳을 모두 한 번씩 들르고 돌아오는 순서는 \(k!\)가지이고, 거꾸로 도는 것을 같은 경로로 보면 \(\dfrac{k!}{2}\)가지이다. 완전 탐색의 시간은 이 수에 비례하므로 \(k\)가 조금만 커져도 감당할 수 없다.

그림 1에서 들를 곳의 수를 바꾸어 보자. 열 곳이면 약 180만 가지라, 1초에 1억 개의 경로를 검사하는 컴퓨터로 0.02초면 모두 따져 확실한 답을 찾는다. 열다섯 곳이면 약 6500억 가지로 2시간 가까이, 스무 곳이면 약 \(1.2 \times 10^{18}\)가지로 380년이 넘는다. 그래서 열 곳 남짓이면 완전 탐색으로 풀고, 그보다 많으면 동적 계획법이나 가까운 곳부터 들르는 어림 방법으로 충분히 좋은 답을 찾는다.1

4.1.2문제를 고르는 기준

찾은 문제가 프로젝트로 알맞은지는 몇 가지 기준으로 판단한다. 해결하면 실제로 누군가에게 도움이 되는가. 필요한 자료를 구할 수 있는가. 지금까지 배운 탐색, 동적 계획법, 그래프 같은 방법으로 풀 수 있는가. 문제의 크기가 정해진 시간과 컴퓨터로 감당할 만한가. 그리고 다른 사람의 개인 정보나 권리를 침해하지 않는가. 잔반 줄이기, 등굣길의 혼잡, 시간표 짜기, 동물 찻길 사고처럼 주변에는 이 기준을 만족하는 문제가 많다. 문제의 크기를 먼저 어림해 보면 어떤 방법을 써야 할지도 정해진다.

주변의 문제문제의 꼴방법 배달 순서외판원 문제 (그래프)완전 탐색, 어림 시간표 짜기조건 만족 문제백트래킹 가장 빠른 등굣길최단 경로다익스트라
그림 2. 주변의 문제를 알려진 문제의 꼴로 바꾸면 쓸 방법이 보인다.

4.1.3예제 풀이

예제 4.1.2

배달 차가 들르는 곳이 지금 10곳인데, 내년에 14곳으로 늘어날 예정이다. 완전 탐색으로 경로를 검사하는 데 지금은 0.02초가 걸린다면, 14곳에서는 얼마나 걸리는가? 하루 한 번 아침에 경로를 계산한다면, 몇 곳까지 완전 탐색을 쓸 수 있을지 판단하여라.

경로 수는 \(10!/2 \approx 1.8 \times 10^6\)에서 \(14!/2 \approx 4.4 \times 10^{10}\)으로 약 2만 4천 배가 된다. 따라서 시간도 약 \(0.02 \times 24000 \approx 480\)초, 곧 8분이다.

아침에 몇 분을 쓸 수 있다면 14곳까지는 완전 탐색이 가능하다. 그런데 15곳이면 그 15배인 2시간, 16곳이면 다시 16배인 32시간이 되어 하루 안에 끝나지 않는다. 즉 들를 곳이 하나 늘 때마다 시간이 그 수만큼 곱으로 늘어난다. 그래서 프로젝트를 설계할 때는 지금의 크기뿐 아니라 앞으로 늘어날 크기까지 어림하고, 15곳을 넘을 것 같으면 처음부터 어림 방법을 함께 준비한다.

아래 탐구 카드에서 주변의 불편함을 찾아 컴퓨터과학으로 풀 문제로 바꾸고, 문제의 크기와 쓸 방법을 정해 보자.

  1. 외판원 문제는 도시가 많아지면 정확한 답을 빨리 찾는 방법이 알려지지 않은 대표적인 문제이다. 그래도 연구자들은 정교한 가지치기로 8만 곳이 넘는 도시의 최단 경로를 정확히 찾은 기록을 세웠다.
마무리

프로젝트는 주변의 불편함을 입력, 출력, 목표가 분명한 문제로 바꾸고, 알려진 문제의 꼴을 찾아 쓸 방법과 그 한계를 정하는 데서 시작한다. 그리고 문제의 크기를 어림해 완전 탐색으로 풀지, 다른 방법을 써야 할지 판단한다. 그래서 처음 질문의 배달 순서는 열 곳이면 180만 가지를 0.02초 만에 모두 따져 볼 수 있지만, 스무 곳이면 수백 년이 걸려 어림 방법이 필요하다.

읽기 1

주변의 불편함을 컴퓨터가 풀 수 있는 문제로 바꾸려면?

읽기 · 문제 발견 · 여러 분야의 사례

“급식 잔반이 너무 많다”, “등굣길이 막힌다”는 불편함이지, 아직 컴퓨터가 풀 수 있는 문제는 아니다. 무엇을 입력하고 무엇을 출력해야 하는지 정해야 비로소 알고리즘을 설계할 수 있다.

1여러 분야에 숨어 있는 컴퓨터과학 문제

정보과학에서 배운 탐색, 분할 정복, 동적 계획법, 그래프, 스택과 큐는 다른 학문의 문제를 풀 때도 그대로 쓰인다. 아래는 고등학생 프로젝트로 다룰 만한 크기의 예이다.

분야실생활 문제입력 → 출력쓸 수 있는 개념
생태·환경무인 카메라 사진에서 야생 동물 종을 세기사진 → 종 이름과 개체 수분류(기계 학습), 자료 구조
생태·환경학교 주변 도로에서 동물 찻길 사고가 잦은 구간 찾기사고 위치 기록 → 위험 구간 순위그래프, 정렬, 자료 분석
에너지교실 냉난방기를 켜는 시간표 짜기시간표, 기온 예보 → 가동 계획최적화, 탐욕 방법, 동적 계획법
교통정류장 사이의 가장 빠른 등굣길노선도, 소요 시간 → 경로그래프 탐색, 최단 경로
생명과학두 생물의 DNA 서열이 얼마나 닮았는지두 서열 → 닮은 정도동적 계획법(서열 정렬, LCS)
물리공기 저항이 있을 때 공의 궤적처음 속도, 각도 → 궤적반복과 수치 계산(시뮬레이션)
학교생활선택 과목 시간표가 겹치지 않게 배정학생별 선택 → 시간표상태 공간 탐색, 백트래킹, 그래프 색칠

2막연한 불편함을 계산 문제로 다듬기

“급식 잔반이 많다”를 예로 들어 본다. 먼저 누가, 언제, 왜 불편한지 관찰하고 자료가 있는지 확인한다. 그다음 다음 질문에 답할 수 있으면 컴퓨터로 풀 수 있는 문제가 된다.

입력은 날짜별 메뉴와 잔반 무게(급식실 기록), 날씨, 행사 여부이다.

출력은 잔반이 많이 나오는 메뉴 조합의 순위, 또는 내일 잔반량 예측이다.

규모

1년 약 190일 × 메뉴 5~6개. 이 정도면 완전 탐색도 가능한지, 더 효율적인 알고리즘이 필요한지 따져 본다.

성공 기준

예측이 실제 잔반량과 얼마나 맞아야 쓸모가 있는가? 누가 결과를 쓰는가(영양 교사, 학생회)?

이미 있는 해결책

비슷한 프로그램이나 공개된 라이브러리, 공공 데이터가 있는가?

문제를 작게 자르는 것도 중요하다. “학교 급식을 개선한다”는 너무 크고, “지난 학기 기록으로 잔반이 많았던 메뉴 상위 10개를 찾아 그래프로 보여 준다”는 몇 주 안에 끝낼 수 있다. 첫 결과를 보고 예측 기능을 더하는 식으로 넓혀 간다.

3효율적으로 푸는 것도 환경을 지키는 일

프로그램은 전기를 써서 돌아간다. 같은 일을 O(n²) 대신 O(n log n)으로 처리하면 자료가 많을수록 계산 시간과 전력이 크게 줄어든다. 생태·환경 문제를 주제로 고르는 것뿐 아니라, 어떤 주제든 효율적인 알고리즘을 쓰는 것이 에너지를 아끼는 길이라는 점도 기억해 둔다.

판단컴퓨터로 풀기 어려운 문제도 있다. 사람의 가치 판단이 필요한 문제(어떤 메뉴가 ‘좋은’ 메뉴인가)는 프로그램이 대신 정해 줄 수 없고, 자료가 없거나 개인 정보를 모아야만 풀 수 있는 문제는 먼저 자료를 정당하게 얻을 수 있는지 따져야 한다. 또 학생 몇 명의 시간표를 짜는 문제라도 경우의 수가 지수적으로 늘면 완전 탐색으로는 끝나지 않을 수 있으므로, 문제의 크기를 미리 어림한다.

확인조건이 달라지면

모둠이 “학교 도서관을 더 좋게 만들기”를 주제로 정했다. 컴퓨터과학 프로젝트로 다듬은 것으로 가장 알맞은 것은?

AI 출제 문항연습문제 풀어보기12문항
Esc

↑↓ 고르기Enter 열기