티스토리 뷰
문제
https://www.acmicpc.net/problem/1759
1759번: 암호 만들기
첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.
www.acmicpc.net
풀이
간단한 백트래킹 문제였다.
모든 경우를 찾아준 뒤에 암호의 길이와 동일한 배열이 완성되면, 조건을 만족하는지 확인해주었다.
나는 아래처럼 해결했지만 자음을 굳이 선언하지 않고 vowel에 포함되는지 확인하여 자음과 모음을 분리할 수 있을 것이다. 이렇게하면 메모리를 조금이나마 줄일 수 있을 것 같다.
import Foundation
let input = readLine()!.split(separator: " ").map { Int(String($0))! }
let l = input[0]; let c = input[1]
let vowel = ["a","e","i","o","u"]
let con = ["b","c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","y","z"]
let list = readLine()!.split(separator: " ").map { String($0) }.sorted(by: <)
var result: [[String]] = []
func dfs(_ arr: [String], _ idx: Int) {
if arr.count == l {
if arr.filter { vowel.contains($0) }.count < 1 {
return
}
if arr.filter { con.contains($0) }.count < 2 {
return
}
print(arr.joined())
return
}
for i in idx..<list.count {
dfs(arr + [list[i]], i + 1)
}
}
dfs([],0)
_____________________________________________________________________________________________________
백트래킹 문제는 난이도 차이가 심한듯
'PS' 카테고리의 다른 글
[Swift/Python] 백준_DFS와 BFS(1260) (6) | 2023.03.09 |
---|---|
[Swift/Python] 백준_가장 큰 증가하는 부분 수열(11055) (0) | 2023.03.09 |
[Swift] 프로그래머스_양궁대회 (0) | 2023.02.15 |
[Swift] 프로그래머스_두 큐 합 같게 만들기 (0) | 2023.02.14 |
[Swift] 프로그래머스_미로 탈출 명령어 (0) | 2023.02.13 |
댓글
최근에 올라온 글
- Total
- Today
- Yesterday