백준
[백준 2941] 크로바티아 알파벳
소금_msg
2022. 8. 16. 17:35
import java.util.Scanner;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] arg){
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
String reStr = "";
int croSum = 0;
StringBuffer sb = new StringBuffer();
while(str.contains("c=")||str.contains("c-")||str.contains("dz=")||str.contains("d-")||str.contains("lj")||str.contains("nj")||str.contains("s=")||str.contains("z=")) {
str = str.replace("c=", "a");
str =str.replace("c-", "a");
str = str.replace("dz=", "a");
str =str.replace("d-", "a");
str =str.replace("lj", "a");
str =str.replace("nj", "a");
str =str.replace("s=", "a");
str =str.replace("z=", "a");
}
for(int i=0;i<str.length();i++) {
String cutStr = String.valueOf(str.charAt(i));
sb.append(cutStr);
sb.append(" ");
}
String totalStr = sb.toString();
StringTokenizer strToken = new StringTokenizer(totalStr," ");
int sum = strToken.countTokens();
System.out.println(sum);
}
}
일단 솔루션을 보지 말고 풀어보자고 생각해서
막코딩ㄲㄲ
크로아티아 문자열에 해당하는 문자가 나올경우 문자열 1개로 replace해준다.
그리고 charAt으로 하나하나 잘라서 편의상 String으로 만들고 한개씩 잘린 문자열 사이에다 StringBuffer append메소드로 공백을
넣어준다.
StringTokenizer로 공백으로 구분된 문자열의 개수를 countTokens메서드로 출력해준다...
문자열 개수는 제대로 나오는데 왜인지 계속 실패가 뜸...
...why
예외처리가 부족했다고 추측중
https://st-lab.tistory.com/68 이분의 블로그를 보고 따라 풀었음.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] arg) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
int cnt = 0;
int len = str.length();
for(int i=0;i<len;i++) {
char ch = str.charAt(i);
if(ch == 'c' && i < len-1) { // 만약 ch가 c 라면?
if(str.charAt(i + 1)=='=' || str.charAt(i + 1)=='-'){
i++;
}
}
else if(ch=='d' && i < len-1){
if(str.charAt(i+1)=='-'){ // d- 일 경우
i++;
}
else if(str.charAt(i+1)=='z' && i < len-2){ //dz= 일 경우
if (str.charAt(i + 2) == '=') {
i += 2;
}
}
}
else if(str.charAt(i)=='l' && i<len-1){ // lj 일 경우
if(str.charAt(i+1)=='j'){
i++;
}
}
else if(str.charAt(i)=='n'&& i<len-1){ // nj 일 경우
if(str.charAt(i+1)=='j'){
i++;
}
}
else if(str.charAt(i)=='s'&& i<len-1){ // s= 일 경우
if(str.charAt(i+1)=='='){
i++;
}
}
else if(str.charAt(i)=='z'&& i<len-1){ // z= 일 경우
if(str.charAt(i+1)=='='){
i++;
}
}
cnt++;
}
System.out.println(cnt);
}
}
charAt(i) 을 반복문으로 돌려서 크로아티아 문자에 해당하는 첫글자가 나오면
그 다음 글자가 크로아티아 문자가 맞는지 if문을 태우고, 맞다면
해당 인덱스+1해주어 cnt가 1(문자1개)로 인식될수 있게 만들어 줌.
그리고 이렇게 만들면
java.lang.StringIndexOutOfBoundsException
참조할 수 없는 범위 오류가 나는데
charAt참조 문자열(ch=='c')이 문자열의 끝에 있다면(str='sadsadac') 이런 오류가 발생한다.
i 의 값이 문자열 길이(str.length) 에서 -1 값보다 작을 경우에만 조건문을 실행하게 만들기.
예외처리도 생각하고 문제를 풀어야 겠다...