더북(TheBook)

이런 재귀의 특성 덕분에 우리는 만들 수 있는 단어를 생성하는 것뿐 아니라, 사전 순으로 정렬된 단어의 리스트도 얻게 되었습니다. 이제 solution() 메서드에서는 generate() 메서드를 사용하여 정렬된 단어의 리스트를 얻고, 이 리스트에서 word가 몇 번째인지 구하면 됩니다. 코드로 구현하면 다음과 같습니다.

public int solution(String word) {
    return generate("").indexOf(word);
}

여기에서 잘 살펴보아야 할 점은 generate()에 앞서 언급한 대로 빈 문자열을 넘겨주었다는 것입니다. generate()는 만나는 모든 문자열을 기록하므로 빈 문자열 역시 리스트의 가장 앞에 기록됩니다. 즉, generate(“”)의 결과는 [“”, “A”, “AA”, “AAA”, …]이 됩니다. 따라서 indexOf() 메서드를 사용하면 실제 만들 수 있는 단어의 리스트에서 인덱스가 아니라, 인덱스에 1이 증가된 값을 얻게 됩니다. 문제에 따라 첫 번째 단어는 인덱스 값인 0이 아니라 1을 반환해야 하므로 별다른 처리 없이 indexOf()의 반환값을 그대로 반환해주면 됩니다.

이렇게 재귀를 이용하여 모음 사전 문제를 풀어 보았습니다.

 

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.