본문 바로가기

1.프로그래밍/알고리즘

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

728x90
반응형

https://www.acmicpc.net/problem/2941

문제

예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다.

크로아티아 알파벳 변경
č c=
ć c-
dž dz=
đ d-
lj lj
nj nj
š s=
ž z=
예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.

dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.

입력

첫째 줄에 최대 100글자의 단어가 주어진다. 알파벳 소문자와 '-', '='로만 이루어져 있다.

단어는 크로아티아 알파벳으로 이루어져 있다. 문제 설명의 표에 나와있는 알파벳은 변경된 형태로 입력된다.

출력

입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.

예제 입력 1

ljes=njak

예제 출력 1

6

예제 입력 3

nljj

예제 출력 3

3

Code

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String[] croatia = new String[]{"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="};
        String str = br.readLine();

        // int count = 0;
        for (String alphabet : croatia) {
            if(str.contains(alphabet)){
                str = str.replace(alphabet, "");
                str = str.replace(alphabet, ".");
                // count++;
            }
        }
        System.out.println(str.length());
        System.out.println(str.length() + count);
    }
}

Point

처음 짠 코드는 주석을 해놓은 코드였다.
기존 문자열에서 contains() 메서드를 사용하여 크로아티아 문자열이 포함되어 있다면 빈칸으로 바꿔주며 새롭게 문자열로 다시 저장하며 count를 세어 더해주었다.

하지만 예제 입력 3번 문자가 lj가 사라지며 nj라는 크로아티아 문자로 변하면서 문제가 생겼다.
그래서 그냥 해당 문자열에서 크로아티아 문자를 전혀 다른 문자로 변경시켜 문자열의 길이를 출력하게 하니 더욱 깔끔하고 문제 없이 완료되었다.

728x90
반응형