https://www.acmicpc.net/problem/1759
์ฒ์์๋ itertools ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์ด์ ๊ตฌํ๊ณ , ๊ฐ ์์ด๋ง๋ค ๊ฒ์ฌํ๋ ๋ฐฉ๋ฒ์ผ๋ก ํ๋๋ฐ ์๊ฐ์ด๊ณผ ๋์๋ค.
์๊ฐํด ๋ณด๋ฉด ์ต๋ ๊ฒฝ์ฐ๊ฐ 15P15๊น์ง ๋์ค๋ฏ๋ก ์ด ๋ฐฉ๋ฒ์ ๋น์ฐํ ์๋์๋ค.
์ํธ๋ฅผ ํ๋ณํ๋ ๋ฐฉ์์ด ์๋ ์ฒ์๋ถํฐ ์ํธ๋ฅผ ์กฐ๊ฑด์ ๋ง๊ฒ ๋ง๋๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ฌธ์ ๋ฅผ ํ์ด ํด๊ฒฐํ์๋ค.
์์ด๋์ด
1. ์ํธ ์กฐ๊ฑด
- ์ํธ์ ์๋ ์ํ๋ฒณ์ ์ฆ๊ฐํ๋ ์์(aescend)๋ก ๋ฐฐ์ด๋์๋ค.
- ์ํธ์๋ ๋ชจ์ 1๊ฐ ์ด์, ์์ 2๊ฐ ์ด์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
2. ๋ฐฑํธ๋ํน
- ๋ฐฑํธ๋ํน ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ์ํ๋ฒณ์ด ์ฆ๊ฐํ๋ ์์๋ก ์ํธ๋ฅผ ์์ฑํด ์ค๋ค.
- ์ํธ๋ฌธ์ ๊ธธ์ด๊ฐ L์ด ๋๋ฉด ์์๊ณผ ๋ชจ์ ๊ฐ์๋ฅผ ํ์ธํด ์ค๋ค.
- ์กฐ๊ฑด์ด ๋ง์ผ๋ฉด ์ํธ๋ฌธ์ ์ถ๋ ฅํด ์ค๋ค.
์ ์ฒด ์ฝ๋
vowel = ['a', 'e', 'i', 'o', 'u']
L, C = map(int, input().split())
words = input().split()
words.sort()
def check(arr):
v_count, c_count = 0, 0 # ๋ชจ์ ๊ฐ์, ์์ ๊ฐ์
for i in arr:
if i in vowel:
v_count += 1
else:
c_count += 1
if v_count >= 1 and c_count >= 2:
return True
else:
return False
def backtracking(arr):
if len(arr) == L:
if check(arr):
print("".join(arr))
return
for i in range(len(arr), C):
if arr[-1] < words[i]:
arr.append(words[i])
backtracking(arr)
arr.pop()
for i in range(C - L + 1):
a = [words[i]]
backtracking(a)
์ฝ๋ ์ค๋ช
vowel = ['a', 'e', 'i', 'o', 'u']
L, C = map(int, input().split())
words = input().split()
words.sort()
๋์ค์ ์ํธ๋ฌธ์ ๋ชจ์, ์์์ ํ์ธํ๊ธฐ ์ํด ๋ชจ์์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฆฌ์คํธ๋ฅผ ํ๋ ์ ์ธํด ๋๋ค.
์ฃผ์ด์ง ์ ๋ ฅ์ ๋ฐ๊ณ , ์ฃผ์ด์ง ๋ฌธ์๋ค์ ์ํ๋ฒณ์์ผ๋ก ์ ๋ ฌ(sort())ํ๋ค.
for i in range(C - L + 1):
a = [words[i]]
backtracking(a)
๊ทธ๋ฆฌ๊ณ ๊ฐ ์ํ๋ฒณ์ ์์์ผ๋ก backtrackingํจ์๋ฅผ ํธ์ถํ๋ค.
์ด๋ ์ํธ๋ฌธ์ ๊ธธ์ด(L)๋ฅผ ๋ง๋ค ์ ์๋ ์ํ๋ฒณ์ ์ ์ธํ๋ค.
์๋ฅผ ๋ค์ด ์์ ์ ์๋ ์ํ๋ฒณ์ ๋ณด๋ฉด a, c, i๊น์ง ์ํธ๋ฌธ์ ๋ง๋ค ์ ์๊ณ ๊ทธ ์ดํ๋ก๋ ์ํธ๋ฌธ ๊ธธ์ด๋ฅผ ๋ง๋ค์ง ๋ชปํ๋๊น ์ ์ธํ๋ค.
def backtracking(arr):
if len(arr) == L:
if check(arr):
print("".join(arr))
return
for i in range(len(arr), C):
if arr[-1] < words[i]:
arr.append(words[i])
backtracking(arr)
arr.pop()
backtrackingํจ์๋ ์์ ๊ฐ๋ค.
๋จผ์ ํ์ถ ์กฐ๊ฑด์ผ๋ก ์ํธ ๋ฆฌ์คํธ์ ๊ธธ์ด๊ฐ L์ด ๋๋ฉด checkํจ์๋ฅผ ํธ์ถํด ๋ชจ์, ์์์ ํ์ธํด ์ค๋ค.
์กฐ๊ฑด์ด ์ฐธ์ด๋ฉด ์ํธ๋ฅผ ์ถ๋ ฅํ๊ณ return ํด์ค๋ค. join ๋ฉ์๋๋ฅผ ์จ์ ๊ฐํธํ๊ฒ ์ถ๋ ฅํด ์ค ์ ์๋ค.
์์ง ๊ธธ์ด๊ฐ L์ด ์๋๋ฉด ์ํ๋ฒณ์ ํ๋์ฉ ์ถ๊ฐํด ์ค๋ค. if๋ฌธ์ ์ฌ์ฉํด ์ํธ๋ฌธ์ด ascend ํ๊ฒ ์ํ๋ฒณ์ ์ถ๊ฐํด ์ค๋ค.
def check(arr):
v_count, c_count = 0, 0 # ๋ชจ์ ๊ฐ์, ์์ ๊ฐ์
for i in arr:
if i in vowel:
v_count += 1
else:
c_count += 1
if v_count >= 1 and c_count >= 2:
return True
else:
return False
checkํจ์๋ ์์ ๊ฐ๋ค.
์ ๋ ฅ๋ฐ์ ๋ฆฌ์คํธ(arr)๋ฅผ ํ๋ฒ ์ค์บํ์ฌ ๋ชจ์๊ณผ ์์ ๊ฐ์๋ฅผ ํ์ธํ๊ณ ์กฐ๊ฑด์ ๋ง์ผ๋ฉด True,
์กฐ๊ฑด์ ๋ง์ง ์์ผ๋ฉด False๋ฅผ ๋ฆฌํดํด์ค๋ค.
'๐งฉ Problem Solving > [๋ฐฑ์ค]' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 28017 ๊ฒ์์ ํด๋ฆฌ์ดํ์ (python ํ์ด์ฌ) (0) | 2023.07.01 |
---|---|
[๋ฐฑ์ค] 9205 ๋งฅ์ฃผ ๋ง์๋ฉด์ ๊ฑธ์ด๊ฐ๊ธฐ (python ํ์ด์ฌ) (0) | 2023.04.09 |
[๋ฐฑ์ค] 11559 puyopuyo (ํ์ด์ฌ python) (0) | 2023.03.26 |
[๋ฐฑ์ค] 2583 ์์ญ ๊ตฌํ๊ธฐ(python ํ์ด์ฌ) (0) | 2023.03.16 |
[๋ฐฑ์ค] 14938 ์๊ฐ๊ทธ๋ผ์ด๋ (python ํ์ด์ฌ) (0) | 2022.09.10 |