문제

알파벳 소문자로만 이루어진 단어 S가 주어진다.

각각의 알파벳에 대해서,
단어에 포함되어 있는 경우에는 처음 등장하는 위치를,
포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성한다.

 

 

입력

첫째 줄에 단어 S가 주어진다.
단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.

 

출력

각각의 알파벳에 대해서
a가 처음 등장하는 위치, b가 처음 등장하는 위치,
z가 처음 등장하는 위치를 공백으로 구분해서 출력한다.

만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다.
단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.

 

 

예제

 

 

문제풀이(JAVA)

import java.util.Scanner;

public class Main {
    public static void main(String args[]){
	 Scanner sc = new Scanner(System.in);
     
     String s = sc.next();
     int alpha[] = new int[26]; // 비교할 알파벳 배열
     int print[] = new int[26]; // 출력할 배열
     
     for(int i = 0; i < 26; i++){
         alpha[i] = i+97; // 1-1 알파벳 초기화 
         print[i] = -1;   // 2-1 -1로 초기화
     }
     
     for(int i =0; i < s.length(); i++){
         for(int j = 0; j < 26; j++){
             if((char)alpha[j] == s.charAt(i)){ // 1-2
                if(print[j] == -1) { // 2-2
                	print[j] = i;	
                }
                // System.out.println((char)alpha[j] + " : " + j); // 결과확인 도와주는 출력문
                 break;
             }
         }
     }
     
     for(int i = 0; i < 26; i++) {
    	 System.out.print(print[i] + " ");
     }
    }
}
더보기

< 추가 설명 >

 

1-1 alpha[i] = i+97;

아스키코드로 int형 배열인 alpha에 넣는다. ( 소문자 a의 아스키코드 : 97 )

ex) i가 0일 때, i+97 = 97(=a) / i가 1일 때, i+97 = 98(=b)...

 

1-2  if((char)alpha[j] == s.charAt(i)){ 

입력받은 문자열과 알파벳을 비교할 때, 강제형변환을 사용하여 int형으로 되어 있는 아스키 코드를 char형으로 바꿔 비교한다.

 ex) alpha[j]가 97일 때, (char)alpha[j]는 a로 생각하여 비교한다.

 

2-1 print[i] = -1;

알파벳이 포함되어 있지 않은 경우 -1을 출력하라고 하였음으로 -1로 모두 초기화 해준다.

 

2-2 if(print[j] == -1) 

만약 -1이 아닌 다른 수가 있다면 그 수를 넣지 않고 넘어가기 위한 조건문이다.

예제를 보면 중복되는 문자는 처음나온 위치만 넣어주었다.