본문 바로가기
PS/Baekjoon

[Baekjoon] 10809 - 알파벳 찾기

by 서현 SEOHYEON 2022. 11. 30.

📝 문제

 

 주의

처음 등장하는 위치를 출력해야 한다.

즉, 앞에 나왔던 문자가 뒤에 나오면 그냥 넘어간다. (이미 처음 등장하는 위치가 저장되어 있으므로)

 

 

🔑 풀이 과정

① 단어 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

댓글