📝 문제
❗ 주의
처음 등장하는 위치를 출력해야 한다.
즉, 앞에 나왔던 문자가 뒤에 나오면 그냥 넘어간다. (이미 처음 등장하는 위치가 저장되어 있으므로)
🔑 풀이 과정
① 단어 S 입력받은 후, char 배열(sarr)로 변경하기(toCharArray() 사용)
② 알파벳의 처음 등장 위치를 저장할 size가 26인 배열(alpha) 생성 → 배열 값은 -1로 초기화
alpha 배열의 인덱스 0에는 a가 처음 나오는 위치, 1에는 b가 처음 나오는 위치 ... 25에는 z가 처음 나오는 위치
③ 문자열을 char 배열로 바꿨으므로 각 배열의 값은 'a', 'b'와 같은 char형이 된다.
문자 'a'의 아스키코드 값은 97, 'a'가 alpha 배열의 인덱스 0에 매칭되게 해야 한다는 것이 이 문제의 핵심 포인트 같다.
char 배열(sarr)을 처음부터 끝까지 돌면서 해당하는 문자의
⑴ alpha 배열의 값이 -1일 경우(문자가 처음 등장할 경우), alpha 배열의 값을 현재 위치로 바꿔준다.
⑵ alpha 배열의 값이 -1이 아닐경우(문자가 처음 등장한 것이 아닌 경우), alpha 배열의 값을 그대로 놔둔다.
④ alpha 배열 출력. System.out.println()을 사용하지 말고 System.out.print() 사용
alpha[sarr[i]-97]
alpha[sarr[i]-'a']
// 동일 표현
🔓 답안
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
char[] sarr = s.toCharArray();
int[] alpha = new int[26];
for(int i = 0; i < 26; i++){
alpha[i] = -1;
}
for(int i = 0; i < s.length(); i++){
if(alpha[sarr[i]-97] == -1){
alpha[sarr[i]-97] = i;
}
}
for(int i = 0; i < 26; i++){
System.out.print(alpha[i] + " ");
}
}
}
'PS > Baekjoon' 카테고리의 다른 글
[Baekjoon] 2754 - 학점계산 (0) | 2022.12.02 |
---|---|
[Baekjoon] 2744 - 대소문자 바꾸기 (0) | 2022.12.01 |
[Baekjoon] 2884 - 알람 시계 (0) | 2022.11.29 |
[Baekjoon] 2750 - 수 정렬하기 (0) | 2022.11.28 |
[Baekjoon] 2743 - 단어 길이 재기 (0) | 2022.11.27 |
댓글