https://www.acmicpc.net/problem/10809
소문자 단어를 입력 받아 그 위치를 출력하는 문제. 전체 알파벳 수만큼 배열을 생성 후 해당하는 알파벳 자리의 인덱스 번호를 넣어주면 되고, 존재하지 않는 알파벳은 -1로 표시한다.
우선 main 메소드에서 string을 입력 받고 alpha 함수를 불러와서 출력하는 형태로 만들어 보았다.
alpha 함수에서는 알파벳의 수 만큼의 int 배열을 만들고 전체에 -1를 입력해둔다.
그리고 입력 받은 string 길이만큼 반복문을 돌려 charAt을 통해 각 index 번호를 가져온다.
word.charAt(i) - 97; 혹은 word.charAt(i) - 'a'; 를 사용하면 인덱스 값을 얻을 수 있다.
예를 들어 baekjoon을 입력 받았다고 가정했을 때, charAt(0)은 b이고 b는 아스키코드로 변환 하면 98이다. → 98 - 97 = 1이므로 b의 알파벳 배열 인덱스 값은 1이 된다. ⇒arr[1] == 'b'
가져온 인덱스 값으로 해당 배열의 값에 입력 받은 String의 인덱스 값을 넣어주면 된다. 이 때, 연속 되는 알파벳이 있다면 처음에 나온 인덱스 번호를 배열 값으로 넣어줘야하기 때문에 if문으로 배열 값이 -1인 자리에만 값을 넣어주는 것으로 만들어 준다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Q_10809 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
for(int arr: alpha(str)) {
System.out.print(arr + " ");
}
}
static int[] alpha(String word) {
int[] arr = new int[26];
for(int i = 0; i < arr.length; i++) {
arr[i] = -1;
}
for(int i = 0; i < word.length(); i++) {
int idx = word.charAt(i) - 97;
if(arr[idx] == -1) {
arr[idx] = i;
}
}
return arr;
}
}