๊ธฐ๋ก๋ฐฉ

BOJ_2057 : ํŒฉํ† ๋ฆฌ์–ผ ๋ถ„ํ•ด ๋ณธ๋ฌธ

CodingTest/Python

BOJ_2057 : ํŒฉํ† ๋ฆฌ์–ผ ๋ถ„ํ•ด

Soom_1n 2022. 12. 1. 15:55

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

2057๋ฒˆ: ํŒฉํ† ๋ฆฌ์–ผ ๋ถ„ํ•ด

์Œ ์•„๋‹Œ ์ •์ˆ˜ N์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ด ์ˆ˜๋ฅผ ์„œ๋กœ ๋‹ค๋ฅธ ์ •์ˆ˜ M(M ≥ 1)๊ฐœ์˜ ํŒฉํ† ๋ฆฌ์–ผ์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋‚ด๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์˜ˆ๋ฅผ ๋“ค์–ด 2=0!+1!๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์ง€๋งŒ, 5๋Š” ์ด์™€ ๊ฐ™์€

www.acmicpc.net



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • ํŒฉํ† ๋ฆฌ์–ผ์˜ ์กฐํ•ฉ์œผ๋กœ n์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ํŒ๋‹จํ•œ๋‹ค.
    • n๋ณด๋‹ค ์ž‘์€ ํŒฉํ† ๋ฆฌ์–ผ์„ ํฐ ์ˆ˜๋ถ€ํ„ฐ n์„ ๋นผ๋ฉฐ 0์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค(๊ทธ๋ฆฌ๋””)

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

fact = [0] * 20
fact[0] = 1
for i in range(1, 20):
    fact[i] = fact[i-1] * i

n = int(input())

if n == 0:
    print("NO")
else:
    for i in range(19, -1, -1):
        if n >= fact[i]:
            n -= fact[i]
    if n:
        print("NO")
    else:
        print("YES")

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • n์˜ ์ตœ๋Œ€๊ฐ’ 1,000,000,000,000,000,000์€ fact(19)๋ณด๋‹ค ํฌ๊ณ , fact(20)๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ, fact(19)๋ถ€ํ„ฐ n์—์„œ ๋นผ๋ฉฐ ๊ณ„์‚ฐํ•œ๋‹ค.
  • ํŒฉํ† ๋ฆฌ์–ผ์˜ ์ตœ์†Œ๊ฐ’ fact(0)์€ 1์ด๋ฏ€๋กœ n์ด 0์ด๋ฉด ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ํŒฉํ† ๋ฆฌ์–ผ 19๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ํฌ์ง€ ์•Š์„๊ฑฐ๋ผ ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, ๊ฐ’์„ ๋ณด๊ณ  ๋†€๋ž๋˜ ๊ฒƒ ๊ฐ™๋‹ค.
  • ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ์—†๋Š”์ง€ ๋นผ๋ฉฐ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์ด ์•„์ฃผ ๊ทธ๋ฆฌ๋””ํ•œ ํ’€์ด๋ผ๊ณ  ๋Š๊ผˆ๋‹ค.
  • ํŒฉํ† ๋ฆฌ์–ผ์˜ ์กฐํ•ฉ์„ ๋ชจ๋‘ ๊ณ„์‚ฐํ•˜๋Š” Brute Force ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ๋„ ํ’€์ด๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

728x90