[1. 문제 재정의 및 추상화]
- 크로아티아 알파벳을 특정한 패턴으로 변경 할 수 있음.
- 단어가 주어졌을 때 크로아티아 알파벳 개수를 세야함
- 테이블에 주어지지 않은 알파벳은 한 글자씩 세야함
- 입력은 최대 100개 의 단어로 구성되며, 알파벳 소문자와 '-', '=' 으로만 이루어 짐.
- 입력이 몇개의 크로아티아 알파벳으로 이루어져 있는지 출력해야 함
[2. 해결 계획]
- 변환 된 패턴을 정의하는 배열을 구성
- 입력된 문자열에 앞에서 부터 (1) 에서 정의 된 패턴과 매치되는 것이 있는지 확인
- 있으면, 해당 길이만큼 slice 를 부분 슬라이스하고, 없는 경우 1 만큼만 부분 슬라이스함
위 과정에서 알파벳 개수를 세야함.
[3. 계획 검증]
[4. 구현]
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
r := bufio.NewReader(os.Stdin)
// Fscanf 사용 고려?
// ReadString 은 delim 까지 읽어들임.
input, _ := r.ReadString('\n')
// 윈도우 계열에서는 개행을 \r\n 으로 읽어들임.
input = strings.Trim(input, "\r\n")
byteStr := []byte(input)
// 정의 된 패턴
specials := []string{"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="}
count := 0
for len(byteStr) > 0 {
matchedLen := 1
// byte slice 를 string 으로
partialStr := string(byteStr)
for _, special := range specials {
// 특수 패턴으로 시작하는 경우
if strings.HasPrefix(partialStr, special) {
matchedLen = len(special)
break
}
}
count++
// 부분 슬라이스 진행
byteStr = byteStr[matchedLen:]
}
fmt.Println(count)
}
'알고리즘 > Baekjoon' 카테고리의 다른 글
[1021]. 회전하는 큐 (0) | 2022.08.22 |
---|---|
[1316] 그룹 단어 체커 (0) | 2022.02.05 |
[1157] 단어 공부 (0) | 2022.02.05 |
[1065] 한수 (0) | 2022.02.05 |
[4673] 셀프 넘버 (0) | 2022.02.05 |