[백준] 2941. 크로아티아 알파벳
문제
https://www.acmicpc.net/problem/2941
풀이
문자열을 입력 받은 후 그 문자열 안에 크로아티아 알파벳이 있는지 확인 후, 크로아티아 알파벳의 개수를 구하는 문제.
크로아티아 알파벳인지 확인하기 위해 입력 받은 str을 charAt으로 하나씩 살펴봐야 한다.
ch가 c일 경우 그 뒤에 오는 문자, 즉 charAt(i+1)이 '=' 이거나 '-'라면, 그 문자는 c와 하나의 문자로 봐야 하기 때문에 i++을 해서 i+1을 탐색하지 않도록 해준다.
dz=일 경우에는 i+=2를 해주면 된다.
다른 문자열도 이런식으로 해주면 되는데, 지금 상태로 컴파일을 하면 StringIndexOutOfBoundsException가 발생한다. 즉 index 범위를 벗어났다는 것인데 예를 들어 문자열의 끝이 c로 끝나는 경우 i+1을 탐색 할 수 없기 때문에 발생하는 것이다.
이것을 방지하기 위해 if문으로 제약을 걸어줘야 한다.
ch가 c이면서 i가 str.length() -1 보다 작을 경우에만(마지막 index가 아닐 경우에만) charAt(i+1)을 할 수 있도록 만들어 준다.
dz=일 경우에는 str.length() -2를 해주면 된다.
lj와 nj, s=와 z=는 뒷 문자열이 같기 때문에 하나의 if문으로 묶어서 코드 길이를 줄여보자.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// title : 크로아티아 알파벳
public class Q_2941 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
int count = 0;
int len = str.length();
for(int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if(ch == 'c' && i < len - 1) {
if(str.charAt(i+1) == '=' || str.charAt(i+1) == '-') {
i++;
}
}
else if(ch == 'd' && i < len - 1) {
if(str.charAt(i+1) == 'z' && i < len - 2) {
if(str.charAt(i+2) == '=') {
i += 2;
}
}else if(str.charAt(i+1) == '-') {
i++;
}
}
else if((ch == 'l' || ch == 'n') && i < len - 1) {
if(str.charAt(i+1) == 'j') {
i++;
}
}
else if((ch == 's' || ch == 'z') && i < len - 1) {
if(str.charAt(i+1) == '=') {
i++;
}
}
count++;
}
System.out.println(count);
}
}
Author And Source
이 문제에 관하여([백준] 2941. 크로아티아 알파벳), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@bonni/백준-2941.-크로아티아-알파벳저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)