-
[๋ฐฑ์ค] 1342 ํ์ด์ ๋ฌธ์์ด with PythonPS 2022. 3. 1. 03:58728x90๋ฐ์ํ
๐ 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๋ก ์ฑ์ ์ด ๊ฐ๋ฅํ์ต๋๋ค.
- ์๊ฐ์ ๋จ์ถํ ์ ์๋ ๋ฐฉ๋ฒ์ ์๊ฐํด๋ณด๋ ๊ฒ๋ ์ข๊ฒ ์ต๋๋ค.
๋ฐ์ํ'PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 2697 ๋ค์์ ๊ตฌํ๊ธฐ with Python (0) 2022.03.01 [๋ฐฑ์ค] 1855 ์ํธ with Python (0) 2022.03.01 [๋ฐฑ์ค] 18243 Small World Network with Python (0) 2022.03.01 [๋ฐฑ์ค] 15722 ๋น๊ธ๋น๊ธ ์ค๋ค์ผ with Python (0) 2022.02.27 [๋ฐฑ์ค] 14425 ๋ฌธ์์ด ์งํฉ with Python (0) 2022.02.27