제출답안
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner s = new Scanner(System.in);
String word = s.next();
int arr2[] = new int[26];
for (int i = 0; i < 26; i++) {
arr2[i] = -1;
}
for (int i = 0; i < word.length(); i++) {
char c = word.charAt(i);
if (arr2[c - 'a'] == -1) {
arr2[c - 'a'] = i;
}
}
for (int i = 0; i < arr2.length; i++) {
System.out.print(arr2[i] + " ");
}
}
}
1. 입력받은 단어를 word변수에 담고, 알파벳a~z의 값을 저장하기 위한 배열 생성 (알파벳 개수 26)
2. 알파벳 개수만큼 for문을 반복하여 -1을 넣어준다 -> 값을 찾지 못하면 -1 그대로 출력하기 위함
3. 주어진 단어에 들어간 문자열만큼 for문을 반복하여 char형 변수 c에 단어의 0번째부터 넣어준다.
- i가 0일때, baekjoon의 b가 c에 입력, 1일때 a가 저장.... 마지막은 n저장
4.해당 알파벳은 a를 뺀 인덱스의 순번이기 때문에 c-a한값을 해당 배열 인덱스에 i값을 담아준다
-> 아스키코드 a:97, b:98... -> 98-97 = 1 -> b는 첫번째이다. (배열은 0번부터 시작)
baekjoon -> b => arr[1] = 0 -> {-1,0,-1,-1......}
baekjoon -> a => arr[0] = 1 -> {1,0,-1,-1........}
baekjoon -> e => arr[4] = 2 -> {1,0,-1,-1,2,-1,-1..}
baekjoon -> k => arr[10] = 3 -> {1,0 ,-1 ,-1, 2 ,-1 ,-1 ,-1 ,-1 ,-1,3...}
* 즉 arr[문자-'a']=i 값을 담고, 존재하지 않으면 기존에 넣어둔 -1이 출력된다
5. 만약 해당 알파벳이 여러개 존재할 경우 첫번째로 위치한 인덱스를 출력하기 위해 해당 배열값이 -1일 경우에만 i를 넣도록 한다
(-1이 아닌 다른 값이 들어가 있으면 이미 앞에서 나왔다는 것임)
6. for문으로 알파벳 개수만큼 반복하여 배열을 출력한다.
'Etc > 코딩테스트' 카테고리의 다른 글
[백준] 11720번 - 숫자의 합 JAVA 자바 (아스키코드 활용) (0) | 2023.09.11 |
---|---|
[백준] 11654번 - 아스키코드 출력하기 ASCII JAVA 자바 - read() (0) | 2023.09.11 |
[백준] 9086번 - 문자열 JAVA 자바 문제풀이 CharAt()&length() (0) | 2023.09.11 |
[백준] 2743번 - 단어 길이 재기 JAVA 자바 - length()함수 (0) | 2023.09.11 |
[백준] 27866번 - 문자와 문자열 자바 JAVA (CharAt함수 사용) (0) | 2023.09.11 |