문제 풀이
백준 10809번 알파벳 찾기는 브론즈 2 난이도로 구현, 문자열 문제입니다.
저번에 작성한 10808번과 유사한 문제로 어려움 없이 풀 수 있습니다.
이번 방식에서는 map이 아닌 배열과 인덱스를 사용해서 풀었습니다.
이전 포스팅을 참고하면 제가 배열로 푸는 방식이 있다고 말씀드렸는데, 그 방식을 활용했습니다.
배열을 알파벳 개수 26개 크기로 선언을 하고,
배열의 인덱스 0번부터 소문자 a값을 넣기 위해 a의 아스키 코드인 97을 빼는 방식을 사용하면 됩니다.
코드
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String S = br.readLine();
int[] arr = new int[26];
for (int i = 0; i < arr.length; i++) {
arr[i] = -1;
}
for (int i = 0; i < S.length(); i++) {
char chr = S.charAt(i);
if (arr[chr - 97] != -1) continue;
arr[chr - 97] = i;
}
StringBuilder sb = new StringBuilder();
for (int i : arr) {
sb.append(i).append(" ");
}
bw.write(sb.toString());
bw.flush();
bw.close();
}
}
입력 받은 단어를 charAt()을 활용해서 char 형식으로 바꿉니다.
그 값에서 97을 뺐을 때 0이 되면 a, 1이면 b, 2이면 c...로 점점 커집니다.
따라서 0인 a ~ 25인 z까지의 값이 나올 때마다 그 인덱스의 값을 1개씩 증가시키면
전체를 출력했을 때 그 알파벳이 등장했음을 알 수 있습니다.
단, 알파벳이 단어에 포함되어 있지 않은 경우가 있기 때문에 배열을 미리 -1로 초기화해둡니다.
이번에는 배열과 인덱스를 활용해서 풀었지만
indexOf()를 사용해서도 간단하게 풀 수 있습니다.
indexOf()
특정 문자나 문자열에 해당하는 문자를 찾아서 인덱스 값을 반환하는 함수.
주어진 값이 없다면 -1을 리턴.
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 10828번 : 스택 - JAVA(자바) (0) | 2025.02.27 |
---|---|
[백준] 11655번 : ROT13 - JAVA(자바) (0) | 2025.02.26 |
[백준] 11656번 : 접미사 배열 - JAVA(자바) (0) | 2025.02.25 |
[백준] 10808번 : 알파벳 개수 - JAVA(자바) (1) | 2025.02.16 |