전체 문자열의 글자수에서 크로아티아 알파벳의 개수를 빼는 방식으로 풀었다.
크로아티아 알파벳의 개수는 크로아티아 알파벳이 변경된 형태의 마지막 글자가 '=', '-', 'j' 셋 중 하나인 점을 이용했다.
입력받은 문자열을 처음부터 체크하는 것이 아니라,
인덱스가 1인 두 번째 문자부터 읽고 '=', '-', 'j' 중 하나라면 그 앞 글자를 검사하는 방식이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
int cnt=0; // 크로아티아 알파벳의 개수
for(int i=1;i<str.length();i++){
char c=str.charAt(i); // 입력받은 문자열의 두 번째 글자부터 하나씩 가져옴
if(c=='='){
// c= 또는 s= 라면 크로아티아 알파벳 개수 +1
if(str.charAt(i-1)=='c'||str.charAt(i-1)=='s'){
cnt++;
}
else if(str.charAt(i-1)=='z'){
// dz=인지 검사하기 위해서는 '='의 앞앞글자(i-2)를 검사해야 하는데
// i가 1일 때 i-2를 해 인덱스 범위를 넘어가는 경우를 방지하기 위해서
// i>=2를 추가했음
if(i>=2&&str.charAt(i-2)=='d'){
cnt++; // dz=는 특수하게 3글자로 이루어져있으므로 개수를 1 더 증가시킴
}
cnt++; // z=일 때
}
}
// c- 또는 d-일 때
else if(c=='-'){
if(str.charAt(i-1)=='c'||str.charAt(i-1)=='d'){
cnt++;
}
}
// lj 또는 nj일 때
else if(c=='j'){
if(str.charAt(i-1)=='l'||str.charAt(i-1)=='n'){
cnt++;
}
}
}
System.out.print(str.length()-cnt);
}
}
'[BOJ] - JAVA' 카테고리의 다른 글
[백준] 1712 : 손익분기점 JAVA 풀이 (0) | 2022.05.16 |
---|---|
[백준] 1316 : 그룹 단어 체커 JAVA 풀이 (0) | 2022.05.16 |
[백준] 5622 : 다이얼 JAVA 풀이 (0) | 2022.05.14 |
[백준] 2908 : 상수 JAVA 풀이 (0) | 2022.05.14 |
[백준] 1152 : 단어의 개수 JAVA 풀이 (0) | 2022.05.14 |