import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
// 입력받은 단어
String word = input.readLine();
// 단어의 길이 저장
int wordLength = word.length();
int count = 0;
for (int i = 0; i < wordLength; i++) {
// 임시 저장할 알파벳 변수
char charTemp = word.charAt(i);
if (charTemp == 'c') {
if (word.charAt(i + 1) == '=') {
i++;
} else if (word.charAt(i + 1) == '-') {
i++;
}
}
else if (charTemp == 'd') {
if (word.charAt(i + 1) == '-') {
i++;
} else if (word.charAt(i + 1) == 'z') {
if (word.charAt(i + 2) == '=') {
i += 2;
}
}
}
else if (charTemp == 'l') {
if (word.charAt(i + 1) == 'j') {
i++;
}
}
else if (charTemp == 'n') {
if (word.charAt(i + 1) == 'j') {
i++;
}
}
else if (charTemp == 's') {
if (word.charAt(i + 1) == '=') {
i++;
}
}
else if (charTemp == 'z') {
if (word.charAt(i + 1) == '=') {
i++;
}
}
count++;
}
System.out.println(count);
}
}
StringIndexOutOfBounds 에러가 발생했다. 만약 i 가 문자열의 마지막 인덱스라면 범위를 넘어가게 되기 때문이다. 따라서 문자열의 길이 - 1 을 한 값이 i 보다 크다면 로직이 수행되도록 수정했다. import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
// 입력받은 단어
String word = input.readLine();
// 단어의 길이 저장
int wordLength = word.length();
int count = 0;
for (int i = 0; i < wordLength; i++) {
// 임시 저장할 알파벳 변수
char charTemp = word.charAt(i);
if (charTemp == 'c') {
if (i < wordLength - 1) {
if (word.charAt(i + 1) == '=') {
i++;
} else if (word.charAt(i + 1) == '-') {
i++;
}
}
}
/** 틀린 부분 */
else if (charTemp == 'd') {
if (i < wordLength - 2) {
if (word.charAt(i + 1) == 'z') {
if (word.charAt(i + 2) == '=') {
i += 2;
}
}
}
else if (i < wordLength -1) {
if (word.charAt(i + 1) == '-') {
i++;
}
}
}
else if (charTemp == 'l') {
if (i < wordLength - 1) {
if (word.charAt(i + 1) == 'j') {
i++;
}
}
}
else if (charTemp == 'n') {
if (i < wordLength - 1) {
if (word.charAt(i + 1) == 'j') {
i++;
}
}
}
else if (charTemp == 's') {
if (i < wordLength - 1) {
if (word.charAt(i + 1) == '=') {
i++;
}
}
}
else if (charTemp == 'z') {
if (i < wordLength - 1) {
if (word.charAt(i + 1) == '=') {
i++;
}
}
}
count++;
}
System.out.println(count);
}
}
d에 대한 크로아티아 알파벳을 찾아낼 때 wordLength - 2 로직을 먼저 구현하였고 그 안에 wordLength - 1 부분을 추가하였다. 하지만 이 코드는 틀렸다. d 에 대한 알파벳을 찾아낼 때 d-2 를 먼저 구현하다보니 d-1 부분이 체크되지 않을 경우가 존재하기 때문이다.
d-1 을 먼저 구현하고 후에 d-2 를 체크하는 방식으로 바꿨다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
// 입력받은 단어
String word = input.readLine();
// 단어의 길이 저장
int wordLength = word.length();
int count = 0;
for (int i = 0; i < wordLength; i++) {
// 임시 저장할 알파벳 변수
char charTemp = word.charAt(i);
if (charTemp == 'c') {
if (i < wordLength - 1) {
if (word.charAt(i + 1) == '=') {
i++;
} else if (word.charAt(i + 1) == '-') {
i++;
}
}
} else if (charTemp == 'd') {
if (i < wordLength - 1) {
if (word.charAt(i + 1) == 'z') {
if (i < wordLength - 2) {
if (word.charAt(i + 2) == '=') {
i += 2;
}
}
} else if (word.charAt(i + 1) == '-') {
i++;
}
}
} else if (charTemp == 'l') {
if (i < wordLength - 1) {
if (word.charAt(i + 1) == 'j') {
i++;
}
}
} else if (charTemp == 'n') {
if (i < wordLength - 1) {
if (word.charAt(i + 1) == 'j') {
i++;
}
}
} else if (charTemp == 's') {
if (i < wordLength - 1) {
if (word.charAt(i + 1) == '=') {
i++;
}
}
} else if (charTemp == 'z') {
if (i < wordLength - 1) {
if (word.charAt(i + 1) == '=') {
i++;
}
}
}
count++;
}
System.out.println(count);
}
}
문제를 풀 때 if 문의 순서를 머릿속으로 대강 생각하지 않고 직접 구현해보며 하는 습관을 가져야 겠다.