숫자로 이루어진 문자열이 주어지면, 그 문자열에서 길이가 n인 모든 연속 부분 문자열을 나타나는 순서대로 출력해요.
예를 들어, 문자열 "49142"에는 다음과 같은 3자리 연속열이 있어요:
그리고 다음과 같은 4자리 연속열도 있어요:
5자리 문자열에서 6자리 연속열을 달라고 하면, 어떤 결과가 나오든 감수해야 해요.
이 연속열은 입력에서 _서로 인접한 위치_를 차지하기만 하면 되고, 숫자가 _수적으로 연속_일 필요는 없다는 점에 유의해요.
두 개의 함수를 정의해요: (두 개라고요? 네, 가끔은 Go에게 더 많은 걸 요구하기도 해요.)
All은 길이가 n인 s의 모든 부분 문자열을 배열로 반환해요.
All(n int, s string) []string
UnsafeFirst는 길이가 n인 s의 첫 번째 부분 문자열을 반환해요.
UnsafeFirst(n int, s string) string
이 시점에서 이 연습 문제를 끝난 것으로 보고 다음으로 넘어가도 돼요.
그런데 잠깐, 합리적인 질문을 하나 할 수도 있어요: 함수 이름이 왜 UnsafeFirst일까요? 관심이 있다면 보너스 연습 문제를 위해 계속 읽어봐요.
go test가 통과되면 go test -tags asktoomuch를 해봐요.
이것은 _빌드 태그_를 사용해 이전에는 활성화되지 않았던 테스트를 활성화해요.
빌드 태그를 사용하면 패키지에서 사용할 파일을 선택할 수 있어요.
여기서는 어떤 테스트 파일을 사용할지 제어해요.
자세한 내용은 Go 문서에서 읽어볼 수 있어요.
이 asktoomuch 테스트를 만족시킬 수 없다는 걸 눈치챌 수도 있어요. 어떤 경우에는 문자열의 처음 N개 문자를 가져올 수 없다는 것을 알릴 방법이 필요해요. UnsafeFirst는 문자열만 반환하기 때문에 그렇게 할 수 없어요.
이를 해결하려면 함수에 반환값을 하나 더 추가해 봐요.
First(int, string) (first string, ok bool)를 정의하고 go test -tags first로 테스트해 봐요.
ok bool 두 번째 반환 인자는 Go에서 흔하고 관용적인 패턴이에요.
예를 들어 맵 조회와 타입 단언에서 볼 수 있어요.
Exercism에 가입하고 Go 트랙을 개념 34개연습 문제 165개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.