회문 곱

회문 곱

보통

지침

주어진 범위에서 회문 곱을 찾아요.

회문 수는 숫자를 뒤집어도 그대로인 수를 말해요. 예를 들어 121은 회문 수지만 112는 아니에요.

주어진 숫자 범위에서, 그 범위 안의 두 수를 곱해 나온 회문 중 가장 큰 것과 가장 작은 것을 찾아요.

풀이는 범위 안에서 가장 큰 회문과 가장 작은 회문, 그리고 각각의 인수를 반환해야 해요. 가장 큰 회문이나 가장 작은 회문에 범위 안의 인수 쌍이 여러 개 있으면, 그 쌍을 모두 반환해요.

예제 1

범위 [1, 9]가 주어졌을 때(양 끝 포함)...

그리고 이 범위에서 나올 수 있는 모든 곱의 목록이 주어지면: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 15, 21, 24, 27, 20, 28, 32, 36, 25, 30, 35, 40, 45, 42, 48, 54, 49, 56, 63, 64, 72, 81]

회문 곱은 모두 한 자리 수예요 (이 경우에는): [1, 2, 3, 4, 5, 6, 7, 8, 9]

가장 작은 회문 곱은 1이에요. 인수는 (1, 1)이에요. 가장 큰 회문 곱은 9예요. 인수는 (1, 9)와 (3, 3)이에요.

예제 2

범위 [10, 99]가 주어졌을 때(양 끝 포함)...

가장 작은 회문 곱은 121이에요. 인수는 (11, 11)이에요. 가장 큰 회문 곱은 9009예요. 인수는 (91, 99)예요.

smallest와 largest 구현에 관한 참고 사항

두 함수 모두 두 개의 키워드 인자를 받아야 해요:

  • max_factor: int
  • min_factor: int, default 0

반환 값은 tuple -- (value, factors)여야 하는데, 여기서 value는 회문 자체이고 factors는 회문을 이루는 두 수를 임의의 순서로 담은 iterable이에요.

예외 메시지

때로는 예외를 발생시켜야 할 경우가 있어요. 예외를 발생시킬 때는 항상 오류의 원인이 무엇인지 알려 주는 의미 있는 오류 메시지를 함께 넣어야 해요. 그러면 코드를 더 읽기 쉽게 만들고 디버깅에 큰 도움이 돼요. 오류 원인이 어떤 유형이라고 확실한 상황이라면 내장 오류 유형 중 하나를 골라 발생시켜도 되지만, 이때도 의미 있는 메시지를 함께 넣어야 해요.

이 연습 문제에서는 largest()나 smallest() 함수가 올바른 범위에 들지 않는 한 쌍의 수를 받았을 때 raise 문을 사용해 ValueError를 "던져야" 해요. exception을 raise하고 그와 함께 메시지를 넣어야만 테스트를 통과할 수 있어요.

메시지와 함께 ValueError를 발생시키려면, 메시지를 exception 타입의 인자로 써요:

# if the max_factor is less than the min_factor
raise ValueError("min must be <= max")
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Python Exercism

회문 곱 문제를 시작해 볼 준비가 됐나요?

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