[๋ฐฑ์ค] 1342 ํ์ด์ ๋ฌธ์์ด with Python
๐ BOJ 1342 ํ์ด์ ๋ฌธ์์ด
๐ก ์กฐ๊ฑด
์ธ์ ํด ์๋ ๋ชจ๋ ๋ฌธ์๊ฐ ๊ฐ์ง ์์ ๋ฌธ์์ด์ ํ์ด์ ๋ฌธ์์ด์ด๋ผ๊ณ ํ๋ค๊ณ ํ๋ค.
์ค์์ด๋ ๋ฌธ์์ด S์ ๋์ค๋ ๋ฌธ์๋ฅผ ์ฌ๋ฐฐ์นํ๋ฉด ์๋ก ๋ค๋ฅธ ํ์ด์ ๋ฌธ์์ด์ด ๋ช ๊ฐ ๋์ค๋์ง ๊ถ๊ธํด์ก๋ค.
๋ง์ฝ ์๋ ๋ฌธ์์ด S๋ ํ์ด์ ๋ฌธ์์ด์ด๋ผ๋ฉด ๊ทธ๊ฒ๋ ๊ฐ์์ ํฌํจํ๋ค.
S์ ๊ธธ์ด๋ ์ต๋ 10์ด๊ณ , ์ํ๋ฒณ ์๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์๋ค.
์ฒซ์งธ ์ค์ ์์น๋ฅผ ์ฌ๋ฐฐ์นํด์ ์ป์ ์๋ก ๋ค๋ฅธ ํ์ด์ ๋ฌธ์์ด์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
๋ธ๋ฃจํธํฌ์ค ์๊ณ ๋ฆฌ์ฆ ์ ํ์ ๋ฌธ์
๐ฅ ์์ค ์ฝ๋
from sys import stdin
arr = stdin.readline().rstrip()
cnt = 0
point = [0 for _ in range(26)]
for i in arr:
point[ord(i) - 97] += 1
def solve(goal, p):
global cnt
if goal == 0:
cnt += 1
return
for c in set(list(arr)):
if point[ord(c) - 97] > 0 and c != p:
point[ord(c) - 97] -= 1
solve(goal - 1, c)
point[ord(c) - 97] += 1
solve(len(arr), '')
print(cnt)๐ ์์ ๋ฐ ์คํ๊ฒฐ๊ณผ
์์
abcdefghij์คํ๊ฒฐ๊ณผ
3628800โจ๏ธ ๋ฌธ์ ํ์ด
๋ธ๋ฃจํธํฌ์ค ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํด๊ฒฐํ๋ ๋ฌธ์ ์์ต๋๋ค.
arr ์ ์ ๋ ฅ๋ฐ์ ๋ฌธ์์ด์ ์ ์ฅํ ๋ค, ์์ฐจ์ ์ผ๋ก ์ํํ๋ฉด์ point ๋ฐฐ์ด์ ์ ์๋ฅผ ๋ถ์ฌํฉ๋๋ค.
solve() ํจ์๋ ์ฌ๊ทํจ์์ ๋๋ค.
arr ์ ์๋ ์ค๋ณต๋์ง ์๋ ๋ฌธ์๋ฅผ ํ๋์ฉ ๋ฃ์ผ๋ฉด์ ๋ง๋ค ์ ์๋ ๋ฌธ์์ด๋ง๋ค cnt๋ฅผ ํ๋์ฉ ๋๋ ค์ค๋๋ค.
cnt๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
๐พ ๋๋์
- ์ฌ๊ทํจ์๋ฅผ ํตํด์ ๋ธ๋ฃจํธํฌ์ค๋ฅผ ๊ตฌํํ์ต๋๋ค.
- ํ์ด์ฌ์์๋ pypy๋ก ์ฑ์ ์ด ๊ฐ๋ฅํ์ต๋๋ค.
- ์๊ฐ์ ๋จ์ถํ ์ ์๋ ๋ฐฉ๋ฒ์ ์๊ฐํด๋ณด๋ ๊ฒ๋ ์ข๊ฒ ์ต๋๋ค.