이 문제의 핵심은, 그래서 앞서 나온 알파벳이 저 뒤에 다시 나오지 않는지 체크해야한다. 단, 함께 붙어나온다면 예외로 친다.
내가 선택한 방식은
1. 새 문자열을 만든다
2. 입력받은 문자열의 글자크기만큼 반복하여, 새 문자열의 뒷 공백을 trim으로 날리고 만나는 마지막 문자와 현재 인덱스의 문자가 일치한다면 새 문자열에 공백을 추가하고, 아니라면 해당 문자를 추가한다.
이렇게 하면 반복되는 문자를 삭제처리함으로써, 나중에 replace(" ", "")로 없앨 수 있다.
이 작업이 끝났다면 만들어진 새 문자열의 replace(" ", "")하고, 공백이 사라진 문자의 크기와 원래 문자를 charArray로 변경하여 distinct() (배열에서 중복되는 원소를 삭제)하고 남은 배열의 크기를 비교하여 같다면 그룹문자로 취급하고, 아니라면 뒤에서 다시 아전에 쓰인 알파벳이 등장했다는 의미이므로 그룹문자가 아니라고 판단한다.
이를 코드로 보면
fun main(args: Array<String>) {
question1316()
}
fun question1316() {
var case = readLine()!!.toInt()
var count = 0
for (i in 1 .. case) {
var word = readLine()!!
var newWord = ""
for(j in word.indices) {
if(j == 0) {
newWord += word[j]
} else {
if(word[j] == newWord.trim().last()) {
newWord += " "
} else {
newWord += word[j]
}
}
}
if(newWord.replace(" ","").length == word.toCharArray().distinct().count()) {
count += 1
}
}
println(count)
}