2023년 1월 1일
08:00 AM
Buffering ...

최근 글 👑

[백준 10809] 알파벳 찾기 - 자바 [ With Java]

2023. 8. 4. 00:56ㆍ백준 알고리즘

 

10809번: 알파벳 찾기 (acmicpc.net)

 

10809번: 알파벳 찾기

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

www.acmicpc.net

 

 

 

 

 

[해설]

 

이 문제의 경우는 핵심을 잘 짚어야 합니다.

 

일단 배열안에 26개의 공간을 만들어 -1을 다 채워놓은 상태에서

시작해야 하며 조금 머리를 써야 풀 수 있는 문제 입니다.

 

이 문제의 경우 아스키 코드를 알아야 하는데

a의 아스키 코드는 97입니다.

 

즉 b의 아스키 코드는 98이고 a의 아스키 코드는 97입니다.

 

그러면 'b' - 'a'를 한다면 값이 1이 나오겠죠.

 

하지만 여기서 주의 해야할 것이 index[0]이 1이니까

b의 값을 array[0]에 집어 넣어야지 라고 하면

문제가 꼬여서 풀 수 없습니다.

 

이 경우에는 반대로 생각해야 합니다.

 

b - a로 뺀 값 1을

값으로 집어넣는게 아닌 배열 인덱스에 집어넣어야 합니다.

 

한번 코드로 보도록 하죠

 

package com.algorithm;

import java.util.*;

public class Main{

    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int[] array = new int[26];

        String name = sc.next(); // backjoon 이름 입력받음

        for(int j=0; j<array.length;j++){
            array[j] = -1; // 배열의 -1을 채운다.
        }

        for(int i=0; i<name.length();i++){
            char result = name.charAt(i); // 0번 일 경우 b를 가져온다 . b = 98

            if(array[result-'a']== -1){ // array[result-'a'] = array[1] == -1이냐 묻는 것.
                array[result-'a'] = i; //array[1] = 0을 넣는다.
                                       //result = a 일 경우 a = 97이된다.
                                       // 97 - 97 = 0 임으로 array[0] = 1을 넣게 되면 1 0 -1 -1 ...로 쭉 이어진다.
            }
        }

        for(Integer i : array){
            System.out.print(i+" ");
        }
    }
}

 

 

 

 

 

 

1번의 경우 그냥 단순히 26개 공간에 있는 배열에 -1를 넣습니다.

 

그 후 charAt() 메서드를 통해 문자열 값 하나를 뽑아오게 됩니다.

 

그렇게 되면 result = b 가 담기게 되겠죠 

 

b는 아스키코드로 98이고 a는 아스키코드로 97이 됩니다.

 

여기서 잘 봐야할 것이

 

if문으로 조건을 걸어줘야 합니다.

 

배열안에 값들이  -1일 때만 backjoon의 문자열 값들을 넣어줘야 하며

만약 -1을 설정하지 않는다면 들어간 배열이 겹쳐서 답이 다르게 나오게 됩니다.

 

그 후 array[1] = 0 을 넣어주게 됩니다.

 

 

그렇게 되면 배열 1번째 자리에 0이 들어가게 됩니다.

 

 

 

백준의 출력 결과를 보게 되면 1번째 인덱스에 0이 들어간걸 확인 할 수 있습니다.

 

그 후 다시 for문을 돌려 i는 1이 됩니다.

 

 

그러면 result의 값은 a = 97이 들어가게 되죠

 

 

 

다시 result를 본다면 a가 들어가게 되고 a는 97입니다.

그렇게 되면 97 - 97 = 0

즉 array[0]번째를 가르키게 됩니다.

그 후 array[0] = i

 

i는 포문을 한번돌아 1이 됨으로

 

array[0] = 1이 되게됩니다.

 

 

그렇게 된다면 0번째 인덱스는 1이 되고

1번째 인덱스는 1이 들어가게 됩니다.

 

이렇게 8번이 돌면 

 

if문의 조건으로 -1만이 있는 공간들에만 값들을 할당하게 되며

 

값들이 하나하나 씩 채워지게 됩니다.

 

이 문제의 경우는 조금 난이도가 있는 문제라고 생각합니다.