알파벳 찾기

곽지욱·2023년 9월 6일

BOJ

목록 보기
13/69
post-thumbnail

10809번: 알파벳 찾기

  • 입력으로 주어지는 문자열은 모두 소문자임.
  • a~z를 모두 출력하여 주어진 문자열에 대해 해당 문자가 처음으로 나오는 위치를 출력한다
  • 위치는 0부터 시작
import java.util.Scanner;

public class String_2 {
    public static void main(String[] args) {

        //입력으로 주어지는 문자열은 알파벳 소문자로만 이루어져 있음.
        //a~z를 모두 출력하여 주어진 문자열에 대해 해당 문자가 처음으로 나오는 위치를 출력
        //위치는 0부터 시작 문자열 첫 단어는 위치가 0임

        Scanner in = new Scanner(System.in);

        int [] arr = new int[26];

        for(int i=0; i<arr.length;i++){

            arr[i] = -1;
            //먼저 int 형 배열을 하나 생성하여 모두 -1로 초기화 시킴
            //이 배열은 문자열 s에 각 문자의 위치를 가리킬 배열임
        }

        String S = in.nextLine();

        for(int i=0; i<S.length(); i++){
            char ch = S.charAt(i); //ch 에 charAt 메소드를 사용하여 문자를 추출
            //best -> 0번인 b가 ch에 들어가 ->b를 arr[] 1번 인덱스에 넣어줘야 함

            if(arr[ch -97]== -1){
                arr[ch - 97] = i; // b - 97 = 1이고 그럼 arr[1] = 0이 됨
                //여기서 0은 b가 처음 등장한 위치
            }

        }

        //but 동일 문자가 포함되어있는 경우 처음 나타난 위치를 기준으로 나타내야 함.
        //즉, 문자열을 앞에서부터 검사할 때 앞선 동일 문자가 존재하여 arr에 위치를 변경했을 경우 arr의 값을 변경하지 않으면 됨
        // -1인 경우 즉 한번도 배열의 원소 값이 초기화 되지 않은 = 동일 문자가 존재하지 않는 경우에만 원소 값을 변경하도록

        for(int val :arr){ //배열 출력
            System.out.print(val + " ");
        }

    }
}
  1. 사이즈가 26인 int형 배열을 생성하여 모두 -1로 초기화 시킴.
  2. S로 문자열을 입력받음
  3. charAt 메소드를 사용하여 문자를 추출하고 ch변수에 저장
  4. 동일 문자가 포함되어 있는 경우 처음 나타난 위치를 기준으로 나타내어야 하기 때문에 if 문으로 arr[ch - 97 or ‘a’] == -1 인 경우, 한번도 배열의 원소 값이 초기화 되지않은 경우에만 arr[ch - 97] 인덱스의 i 값을 넣어줌
  5. i 값이 곧 그 알파벳이 등장한 위치임 arr[ch - 97]을 통해 그 알파벳의 순서와 동일한 인덱스의 값을 찾는 것

0개의 댓글