Coded by Juny

크로아티아 알파벳 본문

Coding & Algorithm/Baekjoon

크로아티아 알파벳

Juny_Choi 2024. 10. 2. 17:01

 

문제

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

크로아티아 알파벳변경
č c=
ć c-
dz=
đ d-
lj lj
nj nj
š s=
ž z=

예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.

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

입력

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

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

출력

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

 

제출

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

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

        String[] sign = {"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="};
        int[] signNum = {1, 1, 2, 1, 1, 1, 1, 1};

        int result = word.length();

        for(int i = 0; i < sign.length; i++){
            if (word.contains(sign[i])){
                result -= signNum[i];
            }
        }

        System.out.println(result);
    }
}

첫 번째 제출 코드

3번 째 문자를 제외한 문자들이 2, 3개씩인데 문제에서 하나의 알파벳으로 취급하라했으므로 각각 int 배열로 1과 2를 이용해 총 자릿수에서 빼주었다. 보통의 입력값들이 잘 해결되어 뿌듯해하고 있던 찰나, 아차차... for문에서 contains함수의 boolean 반환타입에 의해 중복해서 등장할 때는 한번밖에 빼주지 못하는 문제가 발생하였다.

 

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

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

        String[] sign = {"c=", "c-", "d-", "lj", "nj", "s=", "z="};
        String sign2 = "dz=";

        // 1. 'dz='는 3자리의 문자가 1자리로 되므로 우선 처리
        word = word.replaceAll(sign2, "x");

        // 2. 나머지 2자리의 문자들을 찾아 1자리로 변환해주는 작업
        for(int i = 0; i < sign.length; i++){
            word = word.replaceAll(sign[i], "x");
        }

        System.out.println(word.length());
    }
}

두 번째 제출 코드

회고

결국 마지막 최종 제출 코드처럼 너무 돌아가지 않기로 하고 replace()를 이용해 3개의 문자, 2개의 문자를 각각 따로 처리해서 대체 문자를 넣어 자리수를 채워주기로 했다.. 가끔은 복잡하게 하지 않고 간단하게 코딩해보기 

'Coding & Algorithm > Baekjoon' 카테고리의 다른 글

세로읽기  (1) 2024.10.07
그룹 단어 체커  (0) 2024.10.04
단어 공부  (0) 2024.10.02
A+B - 6  (1) 2023.11.16
A+B - 7  (1) 2023.11.16