은행 강도 일당이 주고받은 암호화된 통신 신호를 가로챈 정부 기관에서 일하고 있어요. 이 신호에는 아주 긴 숫자열이 들어 있어요. 우리 팀은 다양한 디지털 신호 처리 기법을 활용해 신호를 분석하고, 강도 계획을 세우고 있음을 알려 줄 만한 패턴을 찾아내야 해요.
이번 과제는 암호화된 신호 속에 담긴 긴 숫자 열에서 패턴을 찾는 거예요.
여기서 사용할 기법을 가장 큰 연속 곱이라고 해요.
먼저 몇 가지 용어를 정의해볼까요.
입력 "63915"로 예제를 하나 풀어봐요.
3이라면 가능한 연속 숫자는 세 개예요:
"639""391""915""639"의 곱은 162예요 (6 × 3 × 9 = 162)"391"의 곱은 27이에요 (3 × 9 × 1 = 27)"915"의 곱은 45예요 (9 × 1 × 5 = 45)"63915"의 가장 큰 연속 곱은 "639"에서 나와요.
따라서 답은 162예요.때로는 예외를 발생시켜야 할 때가 있어요. 이럴 때는 오류의 원인이 무엇인지 알려 주는 의미 있는 오류 메시지를 항상 포함해야 해요. 그러면 코드를 더 읽기 쉽게 만들고 디버깅에도 큰 도움이 돼요. 오류의 원인이 특정 타입일 것이라고 알고 있는 상황이라면 내장 오류 타입 중 하나를 발생시켜도 되지만, 그래도 의미 있는 메시지는 포함해야 해요.
이 연습 문제에서는 largest_product() 함수가 잘못된 입력을 받았을 때 raise 문을 사용해 ValueError를 "던져야" 해요. 테스트는 exception을 raise하고 메시지도 함께 포함해야만 통과해요. series 연습 문제에서 작성한 코드를 재사용해도 좋아요!
메시지와 함께 ValueError를 발생시키려면, 메시지를 exception 타입의 인자로 작성해요:
# span of numbers is longer than number series
raise ValueError("span must not exceed string length")
# span of number is negative
raise ValueError("span must not be negative")
# series includes non-number input
raise ValueError("digits input must only contain digits")
Exercism에 가입하고 Python 트랙을 개념 17개연습 문제 146개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.