-
[백준 - 10809] - 알파벳 찾기 (java)Algorithm/BOJ 2021. 5. 17. 11:50
https://www.acmicpc.net/problem/10809
알파벳 찾기
풀이.
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 + " "); } } }
'Algorithm > BOJ' 카테고리의 다른 글
[백준 1296] 팀이름 정하기 c++ (0) 2021.12.05 [백준 14248 ] 점프 점프 java (0) 2021.10.22 [백준 2535] - 아시아 정보올림피아드 java (0) 2021.10.18 [백준-10866] 덱 - java (0) 2021.06.30 [백준 9012번] - 괄호 java (0) 2021.05.09