Hayden's Archive
[알고리즘] 백준 2941번 : 크로아티아 알파벳 본문
알고리즘 문제 출처 : https://www.acmicpc.net/problem/2941
내가 작성한 코드
String 클래스의 substring() 메소드를 통해 주어진 문자열을 먼저 세개씩 자르고 "dz="와 일치하는지 살펴본다. 그 뒤 문자열을 두개씩 잘라서 나머지 변경된 크로아티아 알파벳과 비교한다. 이 때 "dz="와 "z="는 중복으로 측정될 수 있고, 크로아티아 알파벳을 추려낸 후 남아있는 알파벳의 개수도 합산해야 하므로 boolean 타입 배열로 방문 여부를 체크한다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
int count = 0;
String[] temp = {"c=","c-","d-","lj","nj","s=","z="};
boolean[] visited = new boolean[str.length()];
for(int i=0; i<str.length()-2; i++) {
if(str.substring(i, i+3).equals("dz=")) {
visited[i] = true;
visited[i+1] = true;
visited[i+2] = true;
count++;
}
}
for(int i=0; i<str.length()-1; i++) {
for(int j=0; j<temp.length; j++) {
if(!visited[i] && str.substring(i, i+2).equals(temp[j])) {
visited[i] = true;
visited[i+1] = true;
count++;
}
}
}
for(int i=0; i<visited.length; i++) {
if(!visited[i]) count++;
}
System.out.println(count);
}
}
다른 사람이 작성한 코드
다른 사람의 풀이를 찾아봤는데 나보다 훨씬 깔끔하고 간결하게 푼 코드를 발견했다. String 클래스의 replace() 메소드를 활용해서 변경된 크로아티아 알파벳은 "/"와 같이 특정한 형태로 바꿔주고 문자열의 개수를 세면 금방 끝난다.
참고 : https://blog.naver.com/egayov/221996505202