문제 출처: https://www.acmicpc.net/problem/2941
문제 설명
크로아티아 알파벳과 그냥 알파벳을 구분하여 총 몇개 인지 확인하는 문제
크로아티아 알파벳은 출처 참조
입력
ljes=njak
출력
6
문제 풀이
import java.io.*;
public class Main {
public static void main (String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String word = br.readLine();
String [] crasianAlphabets = {"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="};
int [] crAlpabetIndex = new int [8];
int [] alphabets = new int [26];
StringBuilder sb = new StringBuilder();
for(int i = 0; i < word.length(); i++){
boolean one = false, two = false, three = false;
int endPoint1 = i + 1;
int endPoint2 = i + 2;
int endPoint3 = i + 3;
int index1 = -1;
for(int j = 0; j < alphabets.length; j++) {
char c = (char) (j + 'a');
sb.append(c);
if (word.substring(i, endPoint1).equals(sb.toString())) {
one = true;
index1 = j;
break;
}
sb.delete(0, 1);
}
sb.delete(0, 1);
int index2 = -1;
if(endPoint2 <= word.length()) {
for(int j = 0; j < crasianAlphabets.length; j++) {
if (word.substring(i, endPoint2).equals(crasianAlphabets[j])) {
two = true;
index2 = j;
break;
}
}
}
int index3 = -1;
if(endPoint3 <= word.length()) {
for(int j = 0; j < crasianAlphabets.length; j++) {
if (word.substring(i, endPoint3).equals(crasianAlphabets[j])) {
three = true;
index3 = j;
break;
}
}
}
if(three) {
crAlpabetIndex[index3]++;
i += 2;
} else if (two) {
crAlpabetIndex[index2]++;
i++;
} else if (one)
alphabets[index1]++;
}
int count = 0;
for(int val : alphabets)
count += val;
for(int val : crAlpabetIndex)
count += val;
bw.write(count + "");
br.close();
bw.flush();
bw.close();
}
}
크로아티아 알파벳이 3자리수인게 있고 2자리수인게 있어서 자릿수 별로 확인하는 방식을 했는데 좀 중복 코드 느낌이였다..
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
static String[] arr = { "dz=", "c=", "c-", "d-", "lj", "nj", "s=", "z=" };
public static void main(String[] args) {
String input = initProcess();
for (String a : arr) {
input = input.replaceAll(a, "p");
}
System.out.println(input.length());
}
private static String initProcess() {
try {
return new BufferedReader(new InputStreamReader(System.in)).readLine();
} catch (Exception e) {
}
return null;
}
}
"dz="랑 "z=" 가 substring 느낌이여서 이렇게 안될 줄 알았는데 "dz="를 앞에 넣으면 되나보다.
속도도 제일빠르고 가장 간결한 코드인것 같아서 다음번에 이런문제가 나오면 이런식으로 풀어야 겠다.