1. 먼저 int형 배열을 하나 생성하여 모두 -1로 초기화 시킨다.
이 배열은 문자열 S에 각 문자의 위치를 가리킬 배열이다.
int[] arr = new int[26];
for(int i = 0; i < arr.length; i++){
arr[i] = -1;
}
2. S라는 문자열이 주어진다.
String S = br.readLine();
for(int i = 0; i < S.length(); i++) {
char ch = S.charAt(i);
if(arr[ch - 'a'] == -1) { // arr 원소 값이 -1 인 경우에만 초기화
arr[ch - 'a'] = i;
}
}
3. 반복문을 통해 문자열의 각 문자를 검사한다. 즉, charAt()이라는 메소드를 사용하여 문자를 추출한 뒤 ch라는 변수에 저장한다.
4. ch의 문자의 위치를 앞서 만든 arr 배열의 값으로 바꿔준다.
위치는 0부터 시작하므로, ch의 문자의 위치는 i가 된다.
arr 배열의 인덱스(원소 위치)는 ch가 갖고있는 문자 인코딩값(=아스키 코드값)에 'a' 또는 97을 빼주면 된다.
이는 a가 10진수로 97이라는 값에 대응되기 때문이다.
b라는 문자가 ch에 담겨있을 경우 b-'a'또는 b-97을 하면 1이 되고, arr[1]은 문자 b를 가리킨다.
5. 동일 문자가 포함 되어있는 경우 처음 나타난 위치로 나타내야한다.
즉, 문자열을 앞에서부터 검사해서 앞선 동일 문자가 존재하면 아무 로직도 실행하지 않으면 된다.
전체 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[] arr = new int[26];
for (int i = 0; i<arr.length;i++){
arr[i] = -1;
}
String S = br.readLine();
for(int i = 0; i<S.length(); i++){
char ch = S.charAt(i);
if (arr[ch-'a'] == -1){
arr[ch-'a'] = i;
}
}
for (int val : arr){
System.out.print(val + " ");
}
}
}
'Programming > 알고리즘' 카테고리의 다른 글
[백준] 5622 - 다이얼 - JAVA[자바] (0) | 2022.12.05 |
---|---|
[백준] 2908 - 상수 - JAVA[자바] (0) | 2022.12.02 |
[백준] 11720 - 숫자의 합 - JAVA[자바] (0) | 2022.11.29 |
[백준] 11654 - 아스키 코드- JAVA[자바] (0) | 2022.11.29 |
[백준] 1065 -JAVA[자바] (0) | 2022.11.29 |