๋ฐ์ํ
๐ ๋ฌธ์
https://www.acmicpc.net/problem/1759
๐ ๋์ ํ์ด
๋ฌธ์ ๋ฅผ ๊ฐ์ ๋ถ๋ฅ๋ผ๋ฆฌ ๋ชจ์ ํ์ด์ ๊ทธ๋ฐ๊ฐ, ํ์คํ ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ์ด๋ป๊ฒ ํ์ง ๋ฑ ๋ ์ฌ๋๋ค. ์์ ์๋ ์๊ทธ๋ซ๋๋ฐ,,, ์ญ์ ํ ๋ถ์ผ๋ง ์ฃฝ์ด๋ผ ํ๊ณ , ๊ทธ ๋ถ์ผ์ ์ต์ํด์ง๋๊น์ง ๋ฌธ์ ๋ค์ ๋์ ๋ฃ๋๊ฒ ์ค์ํ๊ฒ ๊ฐ๋ค.
์ผ๋จ, ์ด ๋ฌธ์ ์ ํต์ฌ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ค๋ฆ์ฐจ์์ผ๋ก ์ถ๋ ฅ๋์ด์ผํ๊ธฐ ๋๋ฌธ์, ์ค๋ฆ ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ ๋ฐฐ์ด์ ์ด์ฉํด์ผํ๊ณ , ์์ ์ง๋์๋ ๋ฐฐ์ด์์๋ค์ ๋ณด์ง ์๋๋ก ๋ง๋ค์ด์ฃผ์ด์ผํ๋ค. ์ด ๋ถ๋ถ์, ๋งค๊ฐ๋ณ์๋ก index ๊ฐ์ ๋๊ฒจ์ฃผ๋ฉด์, ์ง๊ธ ๋ณด๋ค๋ ํ๋ ๋ค์ ์๋ ์์๋ง ๋ฐ๋ผ๋ณผ ์ ์๋๋ก ๋ง๋ค์ด์ค ๊ฒ์ด๋ค.
- ์ค๋ณต์ ํ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ visited ๋ฐฐ์ด์ ๋ง๋ค์ด์ ํ๋์ฉ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์๋ค.
- dfs๋ฅผ ์ฌ๊ท๋ก ๋๋ฆฌ๋ฉด์ ์กฐ๊ฑด์ผ๋ก ํ์ธํด์ผํ๋ ๊ฒ์ด 3๊ฐ์ง๊ฐ ์๋ค. ๋ชจ์์ด ํ๊ฐ ์ด์ ์กด์ฌํ๋์ง, ์์์ด ๋๊ฐ ์ด์ ์กด์ฌํ๋์ง, ๊ทธ๋ฆฌ๊ณ ์ ๋ ฅ๋ฐ์ L๊ณผ ๊ธธ์ด๊ฐ ๊ฐ์์ง! ์ด๋ ๊ฒ ์ธ๊ฐ์ง๋ฅผ ํ๋จํด์ฃผ์ด์ผํ๋ค.
์ด ํ์ด์ ๋น์ทํ, ๋ ์์ธํ ํด์์ ๋ณด๊ณ ์ถ๋ค๋ฉด ์๋ ๋ฌธ์ ๋ฅผ ์ฐธ๊ณ ํด๋ณด์.
https://didu-story.tistory.com/381
๐ ์ ๋ต์ฝ๋
import Foundation
var lc = readLine()!.split(separator: " ").map{ Int($0)! }
var l = lc[0]
var c = lc[1]
var aeiou = ["a", "e", "i", "o", "u"]
var arr = readLine()!.split(separator: " ").map{ String($0) }.sorted(by: <)
var visited = Array(repeating: false, count: c)
var password = [String]()
private func dfs(index: Int) {
// ์ต์ ๋ชจ์ ํ๊ฐ ์ด์, ์ต์ ์์ ๋๊ฐ ์ด์
if password.count == l {
var containAeiou = false
var consonantCnt = 0
for i in password {
if aeiou.contains(i) {
containAeiou = true
} else {
consonantCnt += 1
}
}
if consonantCnt >= 2, containAeiou {
print(password.joined(separator: ""))
}
return
}
for k in index..<c {
if !visited[k] {
visited[k] = true
password.append(arr[k])
dfs(index: k)
visited[k] = false
password.removeLast()
}
}
}
dfs(index: 0)
๋ฐ์ํ