백준 - 크로아티아 알파벳[java]

스브코·2021년 11월 12일
0

문제 출처: 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="를 앞에 넣으면 되나보다.
속도도 제일빠르고 가장 간결한 코드인것 같아서 다음번에 이런문제가 나오면 이런식으로 풀어야 겠다.

profile
익히는 속도가 까먹는 속도를 추월하는 그날까지...

0개의 댓글