Hayden's Archive

[알고리즘] 백준 2941번 : 크로아티아 알파벳 본문

Algorithm

[알고리즘] 백준 2941번 : 크로아티아 알파벳

_hayden 2020. 6. 12. 17:11

알고리즘 문제 출처 : https://www.acmicpc.net/problem/2941

 

2941번: 크로아티아 알파벳

문제 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s=

www.acmicpc.net

 

내가 작성한 코드

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