dlqjatnsla21   4년 전

먼저 문제에 다가가는 방향을 M자리 수의 N진수 숫자를 구한 후 각 자리에 모두 1을 더하면 된다라고 생각했습니다.

그에 기반을 두고 다음과 같이 코드를 짰는데 시간 초과가 났습니다...

이렇게 풀면 안되는 걸까요...?

어떻게 접근하면 좋을지 간단한 팁이라도 주시면 감사하겠습니다!

wider93   4년 전

답변을 달았었는데, 우선순위가 거의 역순으로 되어 있어서 다시 적습니다.

근본적으로는 처음부터 n**m개 대신 n*(n-1)*...*(n-m+1)개만 보도록 하는 방법을 생각하시는 게 좋습니다.  0부터 n**m까지 모든 정수를 체크하는 방법으로는 이게 안 될 겁니다.

해당 부분이 수정이 어렵다면, 가령 1, 1, ...으로 시작하는 수열은 무조건 빠지게 되어 있으므로 중간에 바로 그만두게 할 수 있습니다. pypy로 제출할 때 이 정도로 통과는 가능합니다.

순수 언어적 측면에서 문제입니다.

1. int(a/b)는 타입변환을 거치므로 느리고 읽기에도 좋지 않습니다. a//b를 쓰세요.

2. 문자열이 immutable인 것을 알고 계시나요? p += xxx를 할 때마다 파이썬은 문자열을 완전히 새로 만듭니다. 리스트 x에 넣어 두고 나중에 ' '.join(x) 로 처리하는 등의 방법이 더 좋습니다.

댓글을 작성하려면 로그인해야 합니다.