1) Scanner, if - else if를 이용한 풀이
● 조건문을 제대로 적지 않아 StringIndexOutOfBoundsException이 계속해서 발생해서 애를 먹었다..
● 인터넷에서 여러가지 반례를 찾아 예외를 찾아낼 수 있어서 i < str.length - 1과 같은 조건문을 새로 추가해주었다.
mport java.util.Scanner;
public class Back_2941 {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
int count = 0;
for (int i = 0; i < str.length(); i++) {
/* abc 라는 문자는 length가 3, charAt은 2까지 셀 수 있고 i도 2까지 돌 수 있다.
그런데 마지막 문자가 'c'가 들어오면 line 18의 조건문을 타게 되고 (str.charAt(3) == '=')
에서 인덱스 범위를 벗어났기 때문에 StringIndexOutOfBoundsException 예외가 발생한다.
즉, 예외를 발생시키지 않으려면 '=', '-'를 찾는 조건문을 타게해선 안되는데, 문자 길이에서 -1 빼주면
해결이 가능하다.
(i = 2일 때('c'를 검사할 때), 2 < str.length(3) 조건문에서 걸리기 때문에 해결가능)
*/
if (str.charAt(i) == 'c') {
if(i < str.length()-1) {
if (str.charAt(i + 1) == '=') {
i++;
} else if (str.charAt(i + 1) == '-') {
i++;
}
}
}
else if (str.charAt(i) == 'd') {
if(i < str.length()-1) {
if(str.charAt(i+1) == 'z') {
/* i < str.length() - 2 조건문이 없다면 마지막 단어로 z가 나왔을 때
IndexOutOfBoundsException 예외 발생
따라서 마지막 단어로 z가 왔을 때 str.charAt(i+2) 조건문을 타지 않기 위해 조건문을 짜준 것이다.
*/
if(i < str.length()-2) {
if (str.charAt(i + 2) == '=') {
i += 2;
}
}
} else if (str.charAt(i+1) == '-') {
i++;
}
}
}
else if (str.charAt(i) == 'l') {
if(i < str.length()-1) {
if (str.charAt(i+1) == 'j') {
i++;
}
}
}
else if (str.charAt(i) == 'n') {
if(i < str.length()-1) {
if (str.charAt(i+1) == 'j') {
i++;
}
}
}
else if (str.charAt(i) == 's') {
if(i <str.length() -1) {
if (str.charAt(i+1) == '=') {
i++;
}
}
}
else if (str.charAt(i) == 'z') {
if(i < str.length()-1) {
if (str.charAt(i+1) == '=') {
i++;
}
}
}
count++;
}
System.out.println(count);
}
}
'알고리즘 정리' 카테고리의 다른 글
백준 1193번[수학] 분수찾기 (0) | 2021.10.26 |
---|---|
백준 1316번[문자열] 그룹 단어 체커 (0) | 2021.10.20 |
백준 5622번[문자열] 다이얼 (0) | 2021.10.20 |
백준 2098번[문자열] 상수 (0) | 2021.10.20 |
백준 1152번[문자열] 단어의 개수 (0) | 2021.10.20 |