[BOJ]2941クロアチア文字(JAVA)


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

  • 最初の行には最大100文字の単語があります.小文字「-」、「=」で構成されています.

  • 単語はクロアチア文字で構成されています.質問説明表のアルファベットを変更形式で入力します.
  • しゅつりょく
    入出力所与の単語はいくつかのクロアチア文字からなる.
    例1
    ▼入力
    ljes=njak
    ▼出力
    6
    例2
    ▼入力
    ddz=z=
    ▼出力
    3
    例3
    ▼入力
    nljj
    ▼出力
    3
    例4
    ▼入力
    c=c=
    ▼出力
    2
    に答える
    単語→大文字

  • 大文字は、文字列配列(cAlpha)に予め格納されている.

  • 入力された単語(str)ではなく、アルファベット順にforゲートを回します.strを基準にループを実行すると、構文テーブルが見つかりにくくなります.
    また、導入部では、kparbetの使用開始位置(インデックス)をStringBuffer.indexOf()を用いて伝達する.アルファベットが使用されている場合、このメソッドは文字の開始位置を返し、アルファベットでない場合は-1を返します.

  • 同じ文字が入力された単語で複数回使用される可能性があるため、for文の内部で複文を再実行する必要がある.인덱스 =! -1でない場合、大文字は任意の文字に変換されます.これは、1文字しか認識されず、String.replace()は必要な位置の文字だけを削除できないため、StringBuffer.replace()を使用する必要があります.
    また、大文字を使用しているので文字数を計算します.

  • ループを終了すると、大文字以外の文字が残ります.単語のすべての文字を複文でチェックし、str의 알파벳!=임의의 문자であれば文字数を計算します.
  • 💻 コード#コード#
    import java.util.Scanner;
    
    public class Main {
    	public static void main(String[] args) {
    		String[] cAlpha = {"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="};
    		
    		Scanner scanner = new Scanner(System.in);
    		String str = scanner.nextLine(); // 단어 입력받기
    		StringBuffer sb = new StringBuffer();	// 버퍼 사용(원하는 위치의 문자를 변환하기 위함)
    		sb.append(str);
    		scanner.close(); 
    		
    		int cnt = 0; // 문자의 갯수
    		
    		for(int i=0; i<cAlpha.length; i++) {
    			int idx = sb.indexOf(cAlpha[i]);  // 크파벳이 포함된 문자열 시작 위치
    			
    			while(idx != -1) {  // 크파벳이 존재하는 동안
    				cnt++;	// 문자 갯수 count
    				int idx2 = idx + cAlpha[i].length();  // 사용된 크파벳의 끝 위치
    				sb.replace(idx, idx2, "0");  // 크파벳을 임의의 문자 "0"으로 변환
    				
    				idx = sb.indexOf(cAlpha[i]);  // 같은 크파벳이 사용된 위치가 있는지 검색
    			}
    		}
    		
    		for(int i=0; i<sb.length(); i++) {
    			if(sb.charAt(i) != '0')
    				cnt++;	// 문자 갯수 count
    		}
    		
    		System.out.println(cnt);
    	}
    }