728x90
우선적으로 필요한 것은 단어를 입력받고 알파벳 갯수를 카운팅하는 변수이다.
Scanner sc = new Scanner(System.in);
String word = sc.nextLine();
int cnt = 0;
이후 단어의 길이만큼 반복문을 돌며 알파벳을 검사한다. 가장 큰 틀로 아래와 같은 구조를 만들 수 있다.
첫번째 반복할 때는 charAt(0)이 작동하여 첫번째 글자를 검사하게 된다.
for(int i=0 ; i<word.length() ; i++){
char ch = word.charAt(i);
}
다음으로 위 반복문 안에 들어갈 알고리즘을 짤 차례이다.
우리가 고려해야 할 것은 알파벳 표에 주어진 것 뿐이다.
c를 인식했을 때 그 다음 글자가 = 인지 -인지 검사하고
d가 들어왔을 때 그 다음 글자가 z=인지 -인지 검사하고..
해야 하지만 여기서 문제가 발생한다.
c를 인식했을 때 c가 마지막 글자에 있다면 그 다음 글자를 검사하는 과정에서 오류가 발생하게 된다.
이 문자열은 c에서 끝나기 때문에 다음 문자를 불러올 수 없기 때문이다.
따라서 c= 혹은 c- 를 검사할 땐 i<word.length()-1 을 붙여 다음에 올 글자가 있는 경우에만 검사해줘야 한다.
아닌 경우는 그냥 알파벳 c 자체로 흘려서 아무 if문도 통과하지 않게 만들면 된다.
이 경우에 for문 맨 끝애 cnt++를 설정하여 아무 if문도 통과하지 않았을 경우, 즉 위 표에 해당하지 않는 경우에
카운트를 하나 증가시켜야 할 것이다.
최종 코드
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String word = sc.nextLine();
int cnt = 0;
for(int i=0 ; i<word.length() ; i++) {
char ch = word.charAt(i);
if(ch=='c') {
if(i<word.length()-1) { //마지막 자리에 c가 올 경우 발생하는 에러를 방지
if(word.charAt(i+1)=='=') {
i++;
}
else if(word.charAt(i+1)=='-') {
i++;
}
}
}
else if(ch=='d') {
if(i<word.length()-1) { //dz를 검사해야 하는데 d가 마지막에 위치하면 안되니까
if(word.charAt(i+1)=='z') {
if(i<word.length()-2) { //dz=검사를 위해
if(word.charAt(i+2)=='=') { //dz=
i+=2;
}
}
}
else if(word.charAt(i+1)=='-') { //d-
i++;
}
}
}
else if(ch == 'l') {
if(i<word.length()-1) {
if(word.charAt(i+1)=='j') { //lj
i++;
}
}
}
else if(ch == 'n') {
if(i<word.length()-1) {
if(word.charAt(i+1)=='j') { //nj
i++;
}
}
}
else if(ch == 's') {
if(i<word.length()-1) {
if(word.charAt(i+1)=='=') {
i++;
}
}
}
else if(ch == 'z') {
if(i<word.length()-1) {
if(word.charAt(i+1) == '=') {
i++;
}
}
}
cnt++; //다음 문자 건너뜀 =이거나 -일 경우에 한 문자로 봐줬기 때문
}
System.out.println(cnt);
}
}
728x90
'백준 단계별' 카테고리의 다른 글
[Java] 백준 1712: 손익분기점 (0) | 2023.01.25 |
---|---|
[Java] 백준 1316: 그룹 단어 체커 (0) | 2023.01.25 |
[Java] 백준 5622: 다이얼 (0) | 2023.01.18 |
[Java] 백준 2908: 상수 (0) | 2023.01.18 |
[Java] 백준 1152: 단어의 개수 (0) | 2023.01.17 |