package main
import (
"bufio"
"os"
"sort"
"strconv"
"strings"
)
var io = bufio.NewReadWriter(bufio.NewReader(os.Stdin),bufio.NewWriter(os.Stdout))
var L,C int
var ar []string
func back(k,c,v,prev int){
if k==L{
if c>1 && v>0{
for _,c :=range ar{
io.WriteString(c)
}
io.WriteByte('\n')
}
return
}
for i:=prev;i<C;i++{
ar[k]=numbers[i]
switch numbers[i]{
case
"a",
"e",
"i",
"o",
"u":
back(k+1,c,v+1,i+1)
default:
back(k+1,c+1,v,i+1)
}
}
}
var numbers[]string
func main(){
defer io.Flush()
bytes,_,_ :=io.ReadLine()
nums:=strings.Fields(string(bytes))
L,_=strconv.Atoi(nums[0])
C,_=strconv.Atoi(nums[1])
numbers=make([]string,C,C)
ar=make([]string,C,C)
bytes,_,_ = io.ReadLine()
numbers=strings.Fields(string(bytes))
sort.Strings(numbers)
back(0,0,0,0)
}
bufio 에 NewReadWriter 이 있길래, io 변수에 저장해서 변수 하나로 read, write 할 수 있게 짰다.
문자열을 정렬하고, ar 에 문자 하나씩 넣어서 백트래킹 한다.
함수 인자에 자음, 모음 갯수를 넣어줘서 k == L
일 때 최소조건을 만족하는지 검사하고 문자열을 출력해준다.
또한 백트래킹 함수를 호출한 시점의 i 값 +1
을 인자 prev 에 넘겨줘서
호출된 함수의 반복문이 numbers 의 prev 부터 참조해 ar 이 오름차순으로 정렬될 수 있게 한다.
(numbers 는 오름차순으로 정렬되어있음. 변수이름을 잘못지엇다)