[1. 문제 재정의 및 추상화]
- 문제에서 정의하는 그룹 단어
=> 단어에 존재하는 모든 문자에 대해서 각 문자가 연속해서 나타나는 경우
=> kin: k, i, n 이 한번씩 연속해서 나타나므로 그룹 단어
=> aabbbccb: b 가 불연속이므로 그룹 단어가 아님 - 입력으로는 단어의 개수 N 이 맨 처음줄에 있고, 그 밑으로 N 만큼 단어가 주어짐
- 1 <= N <= 100
- 단어는 소문자로만 구성되고, 중복되지 않으며, 그 길이는 최대 100
[2. 해결 계획]
- 알파벳이 위치가 인접하지 않는 경우가 하나라도 있는 경우 그룹단어가 아니다.
[3. 계획 검증]
[4. 구현]
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func isGroupWord(input string) int {
var table [255]int
byteStr := []byte(input)
for ch := 'a'; ch <= 'z'; ch++ {
// 소문자에 대해서 초기화 진행
// 알파벳이 string 내 위치하는 offset 을 의미함.
table[ch] = -1
}
for index, value := range byteStr {
ref := &table[int(value)]
if *ref == -1 {
// 최초 인 경우 offset 만 저장
*ref = index
} else if index-*ref != 1 {
// offset 간 차이가 1 이 아닌 경우 => 불연속 => 그룹 단어가 아님
return 0
} else {
// offset 간 차이가 1이며 이 경우 offset 을 갱신
*ref = index
}
}
return 1
}
func main() {
r := bufio.NewReader(os.Stdin)
TC := 0
fmt.Fscanf(r, "%d\n", &TC)
count := 0
for TC > 0 {
input, _ := r.ReadString('\n')
input = strings.TrimRight(input, "\r\n")
TC--
count += isGroupWord(input)
}
fmt.Println(count)
}
'알고리즘 > Baekjoon' 카테고리의 다른 글
[2630]. 색종이 만들기 (0) | 2022.08.24 |
---|---|
[1021]. 회전하는 큐 (0) | 2022.08.22 |
[2941] 크로아티아 알파벳 (0) | 2022.02.05 |
[1157] 단어 공부 (0) | 2022.02.05 |
[1065] 한수 (0) | 2022.02.05 |