문제 링크는 다음과 같다.
https://www.acmicpc.net/problem/2941
위 문제의 핵심은 문자열 치환이다.
아래 크로아티아 알파벳표에 포함되는 문자열은 하나의 문자로 취급한다.

입력받은 문자에 대해 크로아티아 알파벳으로 치환 후 문자열의 길이를 출력하면 된다.
단순한 방법으로는 크로아티아 알파벳을 세고, 이를 없앤 후 나머지의 문자열 길이를 구하는 방법이 있다.
그러나 이 경우 유의해야하는 것이 있다. 아래의 예시를 보자.
nljj
크로아티아 알파벳인 lj를 없애버리면 남은 문자열은 nj가 된다.
그러나 이 또한 크로아티아 알파벳 nj와 일치하므로 문제가 발생한다.
원래는 n + lj + j 이므로 답은 3이 나와야 하나, 2가 나온다.
탐색한 크로아티아 알파벳을 완전히 제거하는 방식으로 하는 것은 바람직하지 않다.
따라서 나는 각 알파벳을 문자열에서 쓰이지 않았던 다른 문자 (*)로 치환하여 계산하는 방식을 사용하였다.
치환해야하는 크로아티아 알파벳을 하나의 배열로 저장하였다.
이후 반복문을 통해 입력받은 문자열에서 각 알파벳들을 치환하는 작업을 수행한다.
마지막으로 치환된 문자열의 길이를 출력하였다.
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
String[] alphaArr = {"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="};
for (String s : alphaArr) {
str = str.replaceAll(s, "*");
}
System.out.println(str.length());
br.close();
}
}
실제 제출한 코드는 다음과 같다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
String[] alphaArr = {"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="};
for (String s : alphaArr) {
str = str.replaceAll(s, "*");
}
System.out.println(str.length());
br.close();
}
}
제출 결과는 다음과 같다.
