seegongsik
알고리즘

어떻게 문제를 작게 나누어 보기

앞에서 알고리즘은 '문제를 푸는 정해진 순서'라고 했다. 그런데 큰 문제 앞에서는 그 순서가 좀처럼 떠오르지 않는다. 비결은 하나다. 한입에 들어가지 않으면 같은 꼴의 작은 조각으로 쪼개는 거예요.

01

한입에 들어가지 않는다

방을 통째로 치우라고 하면 막막하다.
어디서부터 손대야 할지 순서가 떠오르지 않는다.
큰 문제는 원래 그렇다. 한 덩어리로 보면 너무 커서 한입에 들어가지 않아요.

한 덩어리라 막막해요. 누르면 조각으로 쪼개져요
한 입에 안 들어가는 큰 문제는, 같은 꼴 작은 조각으로 쪼개요.

큰 문제 덩어리를 누르면 작은 조각들로 쪼개진다. 방 치우기 → 책상 · 침대 · 바닥 · 책장.

방을 통째로 보면 막막했는데, 책상·침대·바닥·책장으로 쪼개고 나니 갑자기 할 만해 보인다.
큰 문제를 푸는 첫걸음이 바로 이것, 작게 쪼개는 일이에요.

02

같은 꼴, 더 작은 문제

쪼갠 조각을 잘 보면 재미있는 점이 있다.
조각도 결국 '치우기'다. 방을 치우는 일이 책상을 치우는 일로 작아졌을 뿐이다.
조각은 원래 문제와 같은 꼴의 더 작은 문제예요.

조각을 누르면 안이 보여요
이 안도 결국 같은 꼴 "치우기"예요. 더 작아졌을 뿐이죠
조각은 원래 문제와 같은 꼴, 더 작은 문제예요. 그래서 같은 방법으로 풀 수 있어요.

조각 하나를 누르면 안이 보인다. 그 안도 결국 같은 꼴의 더 작은 문제다. 책상 치우기도 = 치우기.

이것이 좋은 까닭은, 큰 문제를 푸는 방법만 알면 작은 조각도 같은 방법으로 풀 수 있기 때문이다.
새 방법을 배울 필요가 없어요.
같은 꼴이니 쓰던 방법을 그대로 작게 쓰면 돼요.

03

조각에 순서를 세운다

쪼개기만 하면 끝나는 것이 아니다. 조각들에도 순서가 있다.
바닥에 물건이 널렸는데 바닥부터 쓸면 위에서 떨어진 것 때문에 다시 어질러진다.
책상과 침대 위를 먼저 치우고 맨 마지막에 바닥을 쓰는 것이 옳은 순서예요.

처리할 순서대로 조각을 눌러요
쪼갠 뒤엔 순서가 중요해요. 바닥은 맨 마지막에 쓸어야 안 어질러져요.

조각을 처리할 순서대로 누른다. 위(책상·침대·책장)를 먼저, 바닥을 맨 마지막에 두면 맞다.

순서를 맞게 세우니 조각들이 서로 부딪치지 않는다.
앞 조각이 망친 것을 뒤 조각이 또 치우는 일이 없어진다.
1강에서 본 그대로, 같은 조각이라도 순서가 다르면 결과가 달라요.

04

조각의 답을 합친다

조각을 하나씩 다 풀어서 책상도 침대도 바닥도 깨끗해졌다.
그런데 조각만 풀었을 뿐 방은 아직 끝나지 않은 것 아닐까?
그렇지 않다. 조각이 다 풀리면 그것이 모여 방이 깨끗해진 거예요.

푼 조각을 눌러 합쳐요
모인 조각 (0/4)
조각 답이 다 모이면, 그게 바로 큰 문제의 답이에요. 합치기도 한 단계예요.

푼 조각을 차례로 누르면 하나로 합쳐진다. 조각의 답이 다 모이면 그것이 큰 문제의 답, 곧 깨끗한 방이다.

그러니 합치기도 저절로 되는 것이 아니다.
조각의 답을 모아 하나로 잇는 것도 엄연한 한 단계다.
쪼개고, 순서대로 풀고, 합치는 일이 다 맞아야 큰 문제가 진짜로 풀려요.

05

정리: 쪼개기, 같은 꼴, 순서, 합치기

큰 문제 앞에서 막막할 때는 이 네 박자를 떠올리면 된다.
첫째, 같은 꼴의 작은 조각으로 쪼갠다. 둘째, 조각도 같은 문제임을 안다.
셋째, 옳은 순서를 세운다. 넷째, 조각의 답을 합친다.
이것이 컴퓨팅 사고의 출발이에요.

네 박자를 차례로 눌러요
쪼개고 - 같은 꼴 - 순서 - 합치기. 이게 컴퓨팅 사고의 출발이에요
큰 문제를 만나면 이 네 박자. 작게 나누면 어떤 문제도 손에 잡혀요.

네 박자를 차례로 누르면 핵심이 정리된다. 쪼개기 → 같은 꼴 → 순서 → 합치기. 큰 문제를 다루는 한 장의 그림이다.

이제 어떤 큰 문제를 만나도 겁낼 필요가 없어요. 한입에 들어가지 않으면 쪼개면 되니까.
다만 조각이 여러 개라면 무엇을 먼저 할지, 순서가 정말 중요해진다.
다음 레슨에서는 그 줄 세우기, 곧 정렬을 다뤄요.

한 줄 정리큰 문제는 한입에 풀 수 없다. 그래서 같은 꼴의 작은 문제로 쪼개고, 어떤 순서로 풀지 세우고, 조각의 답을 다시 합친다. 이렇게 '쪼개고 - 순서 - 합치기'로 큰 문제를 다루는 것이 컴퓨팅 사고의 출발이고, 어떤 어려운 문제도 작게 나누면 손에 잡혀요.
← 알고리즘
이 페이지가 도움 됐다면 후원하기