반응형
입력한 단어의 각 알파벳들이 제일 먼저 나오는 위치를 찾는 문제이다.
먼저 비교를 위해 각 알파벳을 저장할 배열 a와 각 알파벳의 위치를 나타내 줄 b 배열을 만들어보자.
char[] a = new char[26];
int[] b = new int[26];
for (int i = 0; i < 26; i++) {
a[i] = (char) (97 + i);
b[i] = -1;
}
알파벳은 총 26자이므로 26만큼의 크기를 가진 배열 a, b 를 생성한다
그 후 배열 a에는 각 알파벳을 넣는다. 이때 소문자 a 는 아스키코드로 97에 해당하므로 97+i 를 char형으로 형변환하여 a[i] 에 담아주면 되겠다.
배열 b는 문제에서 등장하지 않는 알파벳은 -1로 표시하므로 -1로 초기화하였다.
이제 입력받은 문자를 charAt(i) 함수를 이용하여 i번째 문자를 잘라 낸 후 a배열의 알파벳과 비교한다.
이 때 i번째 문자가 a배열의 j 번째 알파벳과 동일하다면 이 i를 b배열의 j 번째에 넣어주면 되겠다.
for (int i = 0; i < s.length(); i++) {
for (int j = 0; j < 26; j++) {
if (b[j] == -1 && s.charAt(i) == a[j]) {
b[j] = i;
}
}
}
다만 가장 먼저 나오는 위치를 조회해야 하므로 b[j]가 -1인 경우에만 i를 넣어주면 된다.
전체 코드를 보면 다음과 같다.
import java.util.Scanner;
public class Back10809 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next();
char[] a = new char[26];
int[] b = new int[26];
for (int i = 0; i < 26; i++) {
a[i] = (char) (97 + i);
b[i] = -1;
}
for (int i = 0; i < s.length(); i++) {
for (int j = 0; j < 26; j++) {
if (b[j] == -1 && s.charAt(i) == a[j]) {
b[j] = i;
}
}
}
for (int i = 0; i < 26; i++) {
System.out.print(b[i] + " ");
}
}
}
반응형
'Java > 백준알고리즘' 카테고리의 다른 글
[Java] 백준알고리즘 #10990 별 찍기 - 15 (0) | 2021.03.23 |
---|---|
[Java] 백준알고리즘 #2675 문자열 반복 (0) | 2021.03.19 |
[Java] 백준알고리즘 #1436 영화감독 숌 (0) | 2021.03.18 |
[Java] 백준알고리즘 #2750 수 정렬하기 (0) | 2021.03.17 |
[Java] 백준알고리즘 #1018 체스판 다시 칠하기 (0) | 2021.03.16 |