본문 바로가기
Baekjoon 자바 코드/문자열

[백준] 10809번 알파벳 찾기 풀이 코드 (Java 자바)

by 망댕이 2024. 9. 2.
반응형

 

a~z 기본 출력값이 -1인 상황에서 예제 입력한 문자열의 각 알파벳이 별로 처음 등장한 위치를 -1에서 바꿔주는 문제이다.

접근 방법)

처음으로 26 크기를 가진 배열을 생성한 후 모든 배열 값을 -1로 설정한다.

그리고 입력 값을 받아와 입력 값 길이만큼 반복하는 for문을 만든 다음 char를 이용하여 알파벳을 하나씩 뽑는다.

하나씩 뽑은 알파벳이 26크기를 가진 배열에서 몇 번째 배열에 위치하는지 알기 위해서 아스키코드를 사용한다.

그리고 해당 배열에 위치한 알파벳이 입력값에서 처음 등장한 위치가 얼마인지 바꿔준다.

 

 

▷ 입력값에서 알파벳 처음 등장한 위치 찾기

 

str.charAt(i)을 그대로 사용하여 출력하게 되면 아스키코드 값이 출력된다.

a의 아스키코드 값은 97이므로 (int)ch - 97로 코드를 작성한다. 그러면 a는 0, b는 1, c는 3으로 위치를 뽑아낼 수 있다.

그리고 arr[num]==-1인 경우만 arr [num] 값을 처음 등장한 위치로 바꿔준다.

-1이 아닐 경우는 앞써 한 번 등장했다는 의미로 해석할 수 있다.

Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
for(int i = 0; i < str.length(); i++){
    char ch = str.charAt(i);
    int num = (int)ch-97; //a의 아스키 코드 값이 97이므로
    if(arr[num]==-1){ // 해당 알파벳이 등장하지 않은 경우
        arr[num] = i;
    }
}

 

 

정답 코드 1)

import java.util.*;

class Main {
    public static void main(String[] args) {
        int[] arr = new int[26];
        for(int i = 0; i < 26; i++){
            arr[i] = -1;
        }
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        for(int i = 0; i < str.length(); i++){
            char ch = str.charAt(i);
            int num = (int)ch-97;
            if(arr[num]==-1){
                arr[num] = i;
            }
        }
        for(int i = 0; i < 26; i++){
            System.out.print(arr[i]+" ");
        }
    }
}
반응형