알고리즘/백준(BAEKJOON)

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

jojelly 2021. 9. 16. 09:38
반응형

아스키 코드를 활용해 입려된단어의 각각의 알파벳이 처음 등장하는 위치를 출력하는것! 

+ (포함되지않은 알파벳은 -1과 공백으로 구분해준다.)

 

[풀이방법]

1. 우선입력방식은 두가지가 있다. Scanner와 BufferReader 두가지 방법중 하나를 사용하면되고 Scanner의 경우 주석처리를 해놨다. (BufferReader가 좀 더 입력에 성능이 뛰어나다.)

 

2. String 형태로 입력문자를 word에저장해준다. 

 

3. 소문자 알파벳의 길이의 배열 arr을 생성해준다. 

 

4. 생성된 배열 전체의 값을 for문을 통해 -1로 설정해준다. 

 

5. 이제 입력받았던 word 문자열을 각 문자로 나눠서 처음 시작하는 arr[]해당위치에 순서를 넣어줘야한다. 

 

6. for문을통해 0부터 단어의 길이만큼 반복해준다. 첫번째 단어의 위치는 0으로 설정되는것이다. 

이때 문자의 위치를 알기위해서는 아스키코드를 참고해야한다. 

아스키코드를 보면 소문자 a의 경우 10진수로 97이다. 현재 arr배열의 시작 arr[0]는 a이기 때문에

첫번째 문자의 위치를 알기위해서는 -97또는 -'a'를 해줘야한다. 

 

7. 그렇게되면 알파벳의 위치가 나오게된다. 이를 나는 int number에 저장했다. 

 

8. arr[number] 배열의 위치에 단어의 위치( i )를 넣어주면된다. 

 

9. 이때 실수하지말아야할 부분이 있다. 문제를 읽어보면 처음 나오는 알파벳의 위치를 나타내라고 했기때문에 두번째 세번째 나타날 경우에는 값이 들어가면 안된다.  때문에 if문을 통해 초기 설정해준 -1일경우에만 arr[number]에 i를 넣어주도록한다.

 

10. 이후 for문을 통해 arr을 하나씩 나타내준다 + 공백추가 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
 
public class String10809 {
    public static void main(String[] args) throws IOException {
//        Scanner sc = new Scanner(System.in);
//        String word = sc.next();
//        sc.close();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String word = br.readLine();
 
        int[] arr = new int[26];
        for (int i= 0; i<arr.length; i++){
            arr[i] = -1;
        }
 
        //첫번째로 나오는 자릿수만 저장해야하기때문에 -1이 아닌경우에만 저장하도록
        for (int i = 0; i<word.length(); i++){
             int number=word.charAt(i)-'a';
             if (arr[number] == -1){
                 arr[number] = i;
             }
        }
 
 
        for (int i= 0; i<arr.length; i++){
            System.out.print(arr[i]+" ");
        }
    }
}
 
cs
반응형