[백준 - 10809] - 알파벳 찾기 (java)
https://www.acmicpc.net/problem/10809
10809번: 알파벳 찾기
각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출
www.acmicpc.net
알파벳 찾기
풀이.
java의 String 메소드 중 하나인 indexOf()를 사용하면 간단히 해결 할 수 있는 문제이다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
for (char c= 'a'; c<='z'; c++ ){
System.out.print(str.indexOf(c)+" ");
}
}
}
알파벳 a 부터 z 까지 indexOf() 메소드를 사용하여
입력 받은 문자열의 위치를 리턴 받고 그 값을 출력해주면 된다.
indexOf() 메소드를 사용하지 않고 풀 수도 있다.
배열을 이용하면 된다.
1. 알파벳 소문자는 26개 이기때문에, 크기가 26인 배열을 만든다.
2. 배열의 모든 인덱스를 -1로 초기화 한다.
3. 아스키 코드를 이용하여 배열 인덱스에 문자열의 위치를 초기화 한다.
for (int j = 0; j < str.length(); j++) {
char character = str.charAt(j);
arr[character - 97] = j;
}
소문자 a ~ z는 아스키 코드 97~122 이다.
입력 예제 : baekjoon를 보면
b는 아스키코드 98이기 때문에 arr[98-97] => arr[1] 로 알바벳 b의 인덱스 번호와 동일하다.
이를 이용하여 for 문으로 문자열의 위치를 탐색하여
값을 초기화 해주면 된다.
여기서 주의해야 할 점은
문제에서 각 각의 알파벳이 처음 등장하는 위치를 출력하라는 조건이 있기 때문에
'baekjoon' 예제 처럼 중복된 문자열이 있는 경우,
해당 문자열의 위치로 초기화 했으면 , 다시 초기화 할 수 없게 설정해주면 된다.
즉 , 해당 인덱스의 값이 -1일 때만, 초기화 하라는 조건을 주면 된다.
(다시 초기화 할 수 없다.)
이를 코드로 구현하면 다음과 같다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
int arr[] = new int[26];
for (int i = 0; i < arr.length; i++) {
arr[i] = -1;
}
for (int j = 0; j < str.length(); j++) {
char character = str.charAt(j);
if (arr[character - 97] == -1) {
arr[character - 97] = j;
}
}
for (int v : arr) {
System.out.print(v + " ");
}
}
}