jmkim93   3년 전

알고리즘을 대략 설명드리자면

예를들어 87432 과 같은 감소수를 가정할 때, 1의자리부터 상위자리수의 숫자와 비교하며 1씩 차이나는지 비교한 후

  • 상위자리수와의 차이가 1일 경우: 해당 자리수에서 숫자를 증가시켰을 때 감소수를 만들 여지가 없으므로 상위 자리수로 이동
  • 상위자리수와의 차이가 1보다 클 경우: 해당 자리수의 숫자를 +1 해주는 방식입니다.

87432의 경우 1의자리, 10의 자리수에서는 증가시키지 못하고 100의 자릿수에서 증가시킬 수 있으므로

87432 -> 87/4/32로 나눈 후 87/5/10 -> 87510 와 같이 다음 감소수를 구할 수 있을 것 같습니다.

예외로 n자리 수 중에서 가장 큰 감소수같은 케이스인 (e.g. 98765) 경우 (n+1)자리 수 중 가장 작은 감소수 (e.g. 543210)를 쉽게 얻을 수 있습니다.


그리고 시간단축을 위해 계산한 값은 메모리에 저장해두는 방식을 쓰기도 했는데..

어떻게 더 시간단축을 할 수 있을지 모르겠습니다 ㅜ

(실제로 제 컴에서 돌릴때는 가장 큰 경우인 1022번째 9876543210도 64ms 안에 값이 나오구요..)

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