문자열 순회와 비교해서 주목할 만한 점은 총 3가지입니다.
1. 전체 문자열에서 가능한 모든 규칙을 생성한 다음,
2. 첫 번째 규칙과 첫 번째 문자를 제외한 나머지에 적용될 규칙을 zip() 함수로 묶어 경우의 수를 모두 생성합니다(배열 조회 시 오류 방지를 위해 마지막 빈 글자를 합쳤습니다).
3. 문자열 압축 함수 compress()에 들어가는 값은 똑같이 1부터 전체 문자열 길이의 입니다. 하지만 글자가 단 1글자인 경우를 대비하고자 if 문으로 예외 케이스를 만듭니다.
만약 여러분이 규칙과 문자열을 비교하는 것이 더 어렵고, 자신과 맞는 방법이 아니라고 생각한다면 이런 식으로 규칙과 규칙끼리 전수 조사를 실시하는 방법도 있습니다. 불필요한 비교가 추가되므로 첫 번째 방법보다 느리지만 약 1ms 정도의 시간 차이라 크게 신경 쓰지 않아도 됩니다.
핵심 개념은 모두 동일합니다. ‘가능한 조합을 모두 검사해보는 것’입니다. 책에서는 두 가지 방법을 제시했지만 원한다면 다른 방법을 찾을 수도 있습니다. 문제를 보고 ‘아 이 문제는 ~~니까 ~~로 풀어야겠다’처럼 유형만 외우면 낚시 문제들에 속기 쉽습니다. 문제에서 무엇을 요구하는지 정확하게 파악하고, 이를 해결할 수 있는 방법을 고민하면서 풀어야 합니다.