[BOJ]検索10809文字(JAVA)


に質問
小文字のみからなる単語Sを与える.各アルファベットに単語が含まれている場合は、最初に表示された場所を含むプログラムを作成します.含まれていない場合は、-1を出力します.
入力
1行目には単語Sがあります.単語の長さは100を超えず、アルファベットの小文字だけで構成されています.
しゅつりょく
各アルファベットに対して、aが初めて現れる位置、bが初めて現れる位置...zが初めて現れる位置をスペースで区切る.
アルファベットが単語に含まれていない場合は、-1を出力します.単語の最初の字はゼロ位で、2番目の字は1位です.
例1
▼入力
baekjoon
▼出力
1 0 -1 -1 2 -1 -1 -1 -1 4 3 -1 -1 7 5 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
に答える
  • アルファベットを順番に含む文字列を宣言する.
  • 入力単語を構成するアルファベット位置の配列を格納することを宣言し、配列値を「-1」に初期化する.
  • 入力した単語の構成文字をチェックするために二重forドアを回す.アルファベット(idxの値"-1")がまだ表示されず、アルファベット順文字列に入力単語を構成するアルファベットが見つかっていない場合は、アルファベットの位置を保存します.
  • 💻 コード#コード#
    import java.io.BufferedWriter;
    import java.io.OutputStreamWriter;
    import java.util.*;
    import java.io.IOException;
    
    public class Main {
    	public static void main(String[] args) throws IOException {
    		Scanner scanner = new Scanner(System.in);
    		String s = scanner.nextLine();
    		scanner.close();
    		
    		String alpa = "abcdefghijklmnopqrstuvwxyz";	// 알파벳 순서
    		int[] idx = new int[26];	// 알파벳의 위치를 저장할 배열 생성
    		Arrays.fill(idx, -1);	// 배열 값 초기화(-1 : 포함 x)
    		
    		for(int i=0; i<s.length(); i++) {	// 입력받은 단어 길이
    			for(int j=0; j<alpa.length(); j++) {	// 알파벳 전체 검사
    				if(idx[j] == -1 && (s.charAt(i) == alpa.charAt(j))) {	// 아직 등장하지 않은 경우
    					idx[j] = i;	// 알파벳의 위치 저장
    				}
    			}
    		}
    		
    		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    		for(int i=0; i<alpa.length(); i++) {	// 모든 알파벳 출력
    			bw.write(idx[i] + " ");
    			bw.flush();
    		}
    		
    		bw.close();
    	}
    }