< 문제 분석 및 풀이 방법 >
Backjoon :: 순열의 순서 문제는 직접 구하지 않고 수학적인 연산이 필요하다.
- 범위가 최대 20!이기 때문에 구하려고 들면 시간초과가 날 수 밖에 없다.
- 아이디어는 factorial 값을 저장해둔 배열을 하나 만들고 모듈러 연산을 한다.
- 만약 [3, 2, 4, 1] 배열이 있다고 했을 때 첫 번째가 4라면 [1, x, x, x], [2, x, x, x] 의 경우는 진행한 것으로 간주해 factorial[3] * 2 = 12 를 더한다.
- 이후 두 번째 숫자가 2라면 [3, 1, x, x]의 경우의 수는 전부 진행한 것으로 간주해 factorial[2] * 1 을 더한다.
- k를 입력받을 때 1을 빼주는데 이유는 k 번째 다음 순열을 출력하기 때문이다.
- factorial 배열, 입력받는 k 변수는 long 형으로 선언해야 한다. 범위를 초과하기 때문!
< 소스 코드 >
1 |
|