Page 23 -
P. 23
● 주어진 타일로 올바른 단어를 두 개만 만들 수 있는 경우: tiles = "euhtar"라면 art와 hue
라는 두 단어만 만들 수 있다.
● 주어진 타일로 올바른 단어를 하나 만들고 타일이 몇 개 남는 경우: tiles = "tkabr"라면
art를 만들 수 있고 k와 b가 남는다.
● 올바른 단어에 있는 문자 타일을 다 가지고 있지만, 단어에서는 같은 문자를 2번 이상 사용
하는데 타일은 한 개밖에 없는 경우: tiles = "colr"라면 o가 1개뿐이므로 color라는 단어
를 만들 수 없다.
19.1.2.3 해법을 의사 코드로 추상화하기
의사 코드를 사용하면 앞의 예를 생각하면서 발견한 것을 더 자세히 생각해 볼 수 있다. 올바른 단
어를 하나씩 가져와서 타일을 가지고 그 단어를 만들 수 있는지 모두 살펴봐야 한다. 따라서 루프
가 필요하다. 단어에 있는 각 문자를 살펴봐야 하므로 여기서도 루프가 필요하다. 이 루프는 올바 19
른 단어에 대한 첫 번째 루프에 내포된 루프여야 한다. 내포된 루프에서 살펴보다가 문자가 타일
에 없으면 즉시 루프를 끝내고, 타일이 있으면 루프를 계속 진행한다.
이 로직에서 어려운 곳은 두 군데다. (1) 같은 문자가 여러 번 나오는 경우를 어떻게 처리할 것인
가? (2) 타일에서 단어에 들어 있는 글자를 모두 찾은 경우를 어떻게 알 수 있을까? 이 두 문제를 진급 프로젝트: 스크래블:아트 단어 게임
어떻게 해결할지를 의사 코드에 자세히 작성할 필요는 없다. 하지만 두 문제를 해결할 수 있는지
아닌지는 말할 수 있어야 한다. 나는 두 문제를 모두 해결할 수 있다고 말할 수 있다. 그 방법은 다
음 절에서 알려주겠다. 의사 코드는 다음과 같다.
for word in valid_words:
for letter in word:
if letter가 tiles에 있지 않음:
나머지 글자를 살펴보는 일을 중단하고 다음 단어를 처리한다
else:
letter를 tiles에서 제거한다(글자 중복 처리를 위해)
if tiles에서 word에 들어 있는 모든 글자를 찾음:
word를 found_words에 추가한다
프로젝트 문제를 해결하는 데는 그동안 봐왔던 프로그램에 비해 처리해야 할 일도 많고 추적해야
할 변수도 많다는 점을 알게 됐을 것이다! 처음부터 문제를 심사숙고하지 않았다면 방향을 잃고
헤맸을 가능성이 크다. 이제 문제를 해결하는 데 주요한 요소를 모두 이해했으므로 코드를 작성해
보자. 코딩할 때 중요한 첫 번째 단계는 코드를 더 작고 다루기 쉬운 덩어리로 나누는 것이다.
235
모던 파이썬 입문(본문)5차_최종.indd 235 2019-09-26 오후 9:33:41