[BOJ]2941クロアチア文字


質問する


以前はオペレーティングシステムでクロアチア文字を入力できませんでした.したがって、クロアチア文字の入力は次のように変更します.
クロアチア文字の変化ćc-dždz=đd-ljljnjnjšs=žz=
例えばljes=njakには6つのクロアチア文字(lj,e,š, nj,a,kからなる.単語が与えられると、出力はいくつかのクロアチア文字で構成されます.
džアルファベット、dとž分離とは思えない.ljもnjも同じです.上のカタログにないアルファベットは、一字一字数えています.

入力


最初の行には最大100文字の単語があります.小文字「-」、「=」で構成されています.
単語はクロアチア文字で構成されています.質問説明表のアルファベットを変更形式で入力します.

しゅつりょく


入出力所与の単語はいくつかのクロアチア文字からなる.

入力例1


ljes=njak

サンプル出力1


6

入力例2


ddz=z=

サンプル出力2


3

入力例3


nljj

サンプル出力3


3

入力例4


c=c=

サンプル出力4


2

入力例5


dz=ak

サンプル出力5


3

に答える


イニシャルコード


入力した文字数が1の場合、直接1を出力して終了します.
一字一字別々に読む.
最後の文字であれば、
個数と始点1を増やします.
最後から2番目の文字であれば、
現在位置~現在位置+1を切り取り、その文字が2桁のクロアチア文字であるかを確認します.
正しい場合は、始点を2に増やし、個数を1に増やします.
異なる場合は、始点1を増やし、個数1を増やします.
その他の場合、
2文字、3文字を切り取って保存し、クロアチア文字であるかどうかを確認します.
2つのクロアチア文字と同じであれば、始点を2に増やし、個数を1に増やします.
三重クロアチア文字と同じように始点3を増やし、個数1を増やすことができます.
そうでなければ、始点1を増やし、個数1を増やします.
個数を出力します.

単純コード


入力した文字列でクロアチア文字を検索し、スペースにします.(クロアチア文字数を1に減らす操作)
変更が完了すると、変更された文字列の数が返されます.

コード#コード#


イニシャルコーディング

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();
        int count = 0, start = 0;

        // base case
        if (s.length() == 1) {
            System.out.println(1);
            return;
        }

        while (start < s.length()) {
            if (start == s.length() - 1) {
                count++;
                start++;
            } else if (start == s.length() - 2) {
                String curSubStr2 = s.substring(start, start + 2);
                if (curSubStr2.equals("c=") || curSubStr2.equals("c-") || curSubStr2.equals("d-") || curSubStr2.equals("lj") || curSubStr2.equals("nj") || curSubStr2.equals("s=") || curSubStr2.equals("z=")) {
                    start += 2;
                } else {
                    start++;
                }
                count++;
            } else {
                String curSubStr2 = s.substring(start, start + 2);
                String curSubStr3 = s.substring(start, start + 3);
                if (curSubStr2.equals("c=") || curSubStr2.equals("c-") || curSubStr2.equals("d-") || curSubStr2.equals("lj") || curSubStr2.equals("nj") || curSubStr2.equals("s=") || curSubStr2.equals("z=")) {
                    start += 2;
                } else if (curSubStr3.equals("dz=")) {
                    start += 3;
                } else {
                    start++;
                }
                count++;
            }
        }
        System.out.println(count);
    }
}

より単純なコード

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

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

        // base case
        if (s.length() == 1) {
            System.out.println(1);
            return;
        }

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

        for (String i : croatia) {
            s = s.replace(i, " ");
        }

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