트랙
/
Python
Python
/
연습 문제
/
가장 큰 연속 곱
가장 큰 연속 곱

가장 큰 연속 곱

보통

소개

은행 강도 일당이 주고받은 암호화된 통신 신호를 가로챈 정부 기관에서 일하고 있어요. 이 신호에는 아주 긴 숫자열이 들어 있어요. 우리 팀은 다양한 디지털 신호 처리 기법을 활용해 신호를 분석하고, 강도 계획을 세우고 있음을 알려 줄 만한 패턴을 찾아내야 해요.

지침

이번 과제는 암호화된 신호 속에 담긴 긴 숫자 열에서 패턴을 찾는 거예요.

여기서 사용할 기법을 가장 큰 연속 곱이라고 해요.

먼저 몇 가지 용어를 정의해볼까요.

  • 입력: 분석해야 하는 숫자 열
  • 연속 숫자: 입력 안에 들어 있는, 서로 이웃한 숫자들로 이루어진 열
  • 자릿수: 각 연속 숫자가 몇 자리인지
  • 곱: 숫자들을 서로 곱해서 얻는 값

입력 "63915"로 예제를 하나 풀어봐요.

  • 연속 숫자를 만들려면 원래 입력에서 서로 붙어 있는 숫자들을 가져와요.
  • 자릿수가 3이라면 가능한 연속 숫자는 세 개예요:
    • "639"
    • "391"
    • "915"
  • 그다음에는 각 연속 숫자의 곱을 계산해요:
    • "639"의 곱은 162예요 (6 × 3 × 9 = 162)
    • "391"의 곱은 27이에요 (3 × 9 × 1 = 27)
    • "915"의 곱은 45예요 (9 × 1 × 5 = 45)
  • 162는 27과 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")
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Python Exercism

가장 큰 연속 곱 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Python 트랙을 개념 17개연습 문제 146개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.