어떻게 문제를 작게 나누어 보기
앞에서 알고리즘은 '문제를 푸는 정해진 순서'라고 했다. 그런데 큰 문제 앞에서는 그 순서가 좀처럼 떠오르지 않는다. 비결은 하나다. 한입에 들어가지 않으면 같은 꼴의 작은 조각으로 쪼개는 거예요.
한입에 들어가지 않는다
방을 통째로 치우라고 하면 막막하다.
어디서부터 손대야 할지 순서가 떠오르지 않는다.
큰 문제는 원래 그렇다. 한 덩어리로 보면 너무 커서 한입에 들어가지 않아요.
큰 문제 덩어리를 누르면 작은 조각들로 쪼개진다. 방 치우기 → 책상 · 침대 · 바닥 · 책장.
방을 통째로 보면 막막했는데, 책상·침대·바닥·책장으로 쪼개고 나니 갑자기 할 만해 보인다.
큰 문제를 푸는 첫걸음이 바로 이것, 작게 쪼개는 일이에요.
같은 꼴, 더 작은 문제
쪼갠 조각을 잘 보면 재미있는 점이 있다.
조각도 결국 '치우기'다. 방을 치우는 일이 책상을 치우는 일로 작아졌을 뿐이다.
조각은 원래 문제와 같은 꼴의 더 작은 문제예요.
조각 하나를 누르면 안이 보인다. 그 안도 결국 같은 꼴의 더 작은 문제다. 책상 치우기도 = 치우기.
이것이 좋은 까닭은, 큰 문제를 푸는 방법만 알면 작은 조각도 같은 방법으로 풀 수 있기 때문이다.
새 방법을 배울 필요가 없어요.
같은 꼴이니 쓰던 방법을 그대로 작게 쓰면 돼요.
조각에 순서를 세운다
쪼개기만 하면 끝나는 것이 아니다. 조각들에도 순서가 있다.
바닥에 물건이 널렸는데 바닥부터 쓸면 위에서 떨어진 것 때문에 다시 어질러진다.
책상과 침대 위를 먼저 치우고 맨 마지막에 바닥을 쓰는 것이 옳은 순서예요.
조각을 처리할 순서대로 누른다. 위(책상·침대·책장)를 먼저, 바닥을 맨 마지막에 두면 맞다.
순서를 맞게 세우니 조각들이 서로 부딪치지 않는다.
앞 조각이 망친 것을 뒤 조각이 또 치우는 일이 없어진다.
1강에서 본 그대로, 같은 조각이라도 순서가 다르면 결과가 달라요.
조각의 답을 합친다
조각을 하나씩 다 풀어서 책상도 침대도 바닥도 깨끗해졌다.
그런데 조각만 풀었을 뿐 방은 아직 끝나지 않은 것 아닐까?
그렇지 않다. 조각이 다 풀리면 그것이 모여 방이 깨끗해진 거예요.
푼 조각을 차례로 누르면 하나로 합쳐진다. 조각의 답이 다 모이면 그것이 큰 문제의 답, 곧 깨끗한 방이다.
그러니 합치기도 저절로 되는 것이 아니다.
조각의 답을 모아 하나로 잇는 것도 엄연한 한 단계다.
쪼개고, 순서대로 풀고, 합치는 일이 다 맞아야 큰 문제가 진짜로 풀려요.
정리: 쪼개기, 같은 꼴, 순서, 합치기
큰 문제 앞에서 막막할 때는 이 네 박자를 떠올리면 된다.
첫째, 같은 꼴의 작은 조각으로 쪼갠다. 둘째, 조각도 같은 문제임을 안다.
셋째, 옳은 순서를 세운다. 넷째, 조각의 답을 합친다.
이것이 컴퓨팅 사고의 출발이에요.
네 박자를 차례로 누르면 핵심이 정리된다. 쪼개기 → 같은 꼴 → 순서 → 합치기. 큰 문제를 다루는 한 장의 그림이다.
이제 어떤 큰 문제를 만나도 겁낼 필요가 없어요. 한입에 들어가지 않으면 쪼개면 되니까.
다만 조각이 여러 개라면 무엇을 먼저 할지, 순서가 정말 중요해진다.
다음 레슨에서는 그 줄 세우기, 곧 정렬을 다뤄요.