ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์ค„ ์„œ๋Š” ๋ฐฉ๋ฒ•

n๋ช…์˜ ์‚ฌ๋žŒ์ด ์ผ๋ ฌ๋กœ ์ค„์„ ์„œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. n๋ช…์˜ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” ๊ฐ๊ฐ 1๋ฒˆ๋ถ€ํ„ฐ n๋ฒˆ๊นŒ์ง€ ๋ฒˆํ˜ธ๊ฐ€ ๋งค๊ฒจ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. n๋ช…์ด ์‚ฌ๋žŒ์„ ์ค„์„ ์„œ๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ 3๋ช…์˜ ์‚ฌ๋žŒ

programmers.co.kr

 

๋ฌธ์ œ ํ’€์ด

 ์ฒ˜์Œ ๋ฌธ์ œ๋ฅผ ์ ‘ํ•˜์˜€์„ ๋•Œ๋Š” `DFS`๋ฅผ ํ†ตํ•ด ๊ฐ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ณ  `K`์ธ ๊ฒฝ์šฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋˜์ง€ ์•Š์„๊นŒ ์ƒ๊ฐํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋ฐฉ์‹์€ `N`์ด 20์ด๋ฏ€๋กœ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๋”ฐ๋ผ์„œ `K`์ธ ๊ฒฝ์šฐ๋ฅผ ๋ฐ”๋กœ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ํ’€์–ด์•ผ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰, ์ด ๋ฌธ์ œ๋Š” ๋‹จ์ˆœํžˆ `DFS`๋ฅผ ํ†ตํ•ด ์กฐํ•ฉ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?๋ฅผ ๋ฌป๋Š” ๋ฌธ์ œ๊ฐ€ ์•„๋‹Œ ํŒฉํ† ๋ฆฌ์–ผ ์„ฑ์งˆ์„ ํ†ตํ•ด ํšจ์œจ์ ์œผ๋กœ K์ธ ๊ฒฝ์šฐ์˜ ์กฐํ•ฉ์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š”๊ฐ€?๋ฅผ ๋ฌป๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

 ์˜ˆ๋ฅผ ๋“ค์–ด N์ด 3์ธ ๊ฒฝ์šฐ, ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜์—ดํ•  ์ˆ˜ ์žˆ๋‹ค.

  • `[1, 2, 3]`, `[1, 3, 2]`
  • `[2, 1, 3]`, `[2, 3, 1]`
  • `[3, 1, 2]`, `[3, 2, 1]`

 ์ฆ‰, ์•ž์ž๋ฆฌ ์ˆ˜์— ๋”ฐ๋ผ 2๊ฐ€์ง€ ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ฒซ ๋ฒˆ์งธ์— ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” `(N - 1)!`๊ณผ ๊ฐ™๋‹ค. ์ด์™€ ๊ฐ™์€ ์„ฑ์งˆ์„ ์ด์šฉํ•˜์—ฌ `K`๋ฅผ `(N - 1)!`๋กœ ๋‚˜๋ˆ„๋ฉด ์ฒซ ๋ฒˆ์งธ ์ž๋ฆฌ์— ์–ด๋–ค ์ˆซ์ž๊ฐ€ ์˜ค๋Š”์ง€ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด `DFS`์™€ ๋‹ฌ๋ฆฌ `K`์ธ ๊ฒฝ์šฐ์— ๊ฐ ์ž๋ฆฟ์ˆ˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

 

์ฝ”๋“œ

from math import factorial


def solution(n, k):
    answer = []
    nums = list(range(1, n + 1))

    while n != 0:
        f = factorial(n - 1)
        answer.append(nums.pop((k - 1) // f))
        n -= 1
        k %= f

    return answer

 

728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€