Java/백준알고리즘

[Java] 백준알고리즘 #10809 알파벳 찾기

Sehyeok20 2021. 3. 19. 19:17
반응형

백준알고리즘 #10809 알파벳 찾기

입력한 단어의 각 알파벳들이 제일 먼저 나오는 위치를 찾는 문제이다.

 

먼저 비교를 위해 각 알파벳을 저장할 배열 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] + " ");

		}

	}

}
반응형