[Baekjoon] 2941번 문제풀이 - 크로아티아 알파벳

2020. 8. 7. 18:01Computer Sciences/Problem Solve

문제를 이해하는 것부터 난관이었어요 ㅠㅜ 기존 알파벳에 크로아티아 알파벳이 추가된 것이고 여러 문자로 이루어져 있으니 그 문자들을 하나로 보고 입력받은 문자열의 알파벳 개수를 세면 되는 것이었습니다.

한 마디 > a~z + 크로아티아 알파벳

 

이 문제를 푸는 방법으로 생각한 것은 먼저 크로아티아 알파벳들을 배열로 만듭니다. 그리고 문자열에서 배열의 순서대로 해당 문자를 포함하고 있다면 카운트하고 그 문자를 공백으로 치환합니다(나중에 크로아티아 알파벳을 제외한 문자의 길이를 얻기 위해서). 비교가 모두 끝나면 문자열의 공백을 제거하고 그 문자열의 길이를 얻으면 크로아티아 알파벳 개수 + 알파벳 개수를 구할 수 있습니다. 코드를 봅시다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Baekjoon2941 {
    public static void main(String[] args) {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = null;

        try {
            str = br.readLine();
        } catch (IOException e) {
            e.getStackTrace();
        }

        String[] match = { "c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z=" };
        int alphaCount = 0;
        for (int i = 0; i < match.length; i++) {
            while (str.contains(match[i])) {
                alphaCount += 1;
                str = str.replaceFirst(match[i], " ");
            }
        }
        str = str.replace(" ", "");
        alphaCount += str.length();
        System.out.println(alphaCount);
    }
}

 

replaceFirst를 쓴 이유는 혹시나 문자열에 포함된 크로아티아 알파벳이 여러 개인데 한꺼번에 모두 치환돼서 카운트를 하지 못할까봐 replaceFirst를 사용했습니다.