현재

[Java][BaekJoon][10809] 알파벳 찾기 본문

알고리즘/백준

[Java][BaekJoon][10809] 알파벳 찾기

AAAge 2023. 9. 24. 11:24

<문제 의도>

저장된 문자열의 index번호를 출력할 수 있느냐 묻는 문제이다.

 

<풀이코드>

import java.util.Scanner;

public class BaekJoon_Java_10809 {
    public static void main(String[] args) {
        Scanner scn = new Scanner(System.in);
       
        String s = scn.nextLine();
       
        int strings[] = new int[s.length()];
        int alphabet [] = new int[26];
        int saveNumber[] = new int[26];

        for ( int x = 0 ; x < 26 ; x ++){
            saveNumber[x] = -1;
        }

        int count = 0;

        for ( int x = 0 , b = 'a'; x < 26 ; x++, b++){ //alphabet[]에 a ~ z 순으로 0 ~ 25 대입함
            alphabet[x] = b-'a';
        }

        for ( int x = 0 ; x < s.length(); x++){ // strings [] 에 = baekjoon 대입
            strings[x] = s.charAt(x)-'a';
        }
       

        for ( int x = 0 ; x < strings.length ; x++){
            for ( int y = 0 ; y < 26 ; y++){
                if (strings[x] == alphabet [y]){
                    if ( saveNumber[y] == -1){
                        saveNumber[y] = count;
                    }
                    count++;
                    break;
                }
            }
        }
        for ( int k : saveNumber){
            System.out.print(k+" ");
        }
    }
}
//baekjoon
//a b  c  d e  f  g  h  i j k  l  m n o  
//1 0 -1 -1 2 -1 -1 -1 -1 4 3 -1 -1 7 5 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
//순서가.. a ~ z 까지의 알파벳이 저장되어있고 ? b에서 26번 돌림 1반환,

<풀이과정>

처음에는 boolean으로 체크하면서 풀면 되겠다고 생각하였다.

하지만 중복이 나왔을 때 예외 처리하는 과정이 까다로워서 booelan으로 해결하지는 못했다.

string의 index를 찾아주는 api가 있었지만, api 사용없이 풀어보고 싶다는 생각에 api를 사용하지 않았다.

결론적으로 count를 통해 index를 대신하였고, 중복됐을때는 count 수를 입력하지 않는 것을 통해 예외 과정을 처리하였다.

 

<문제출처>

https://www.acmicpc.net/problem/10809

 

10809번: 알파벳 찾기

각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출

www.acmicpc.net