본문 바로가기
백준

[백준] 10809번 : 알파벳 찾기 – JAVA [자바]

by Hongwoo 2022. 7. 7.
반응형

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

 

10809번: 알파벳 찾기

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

www.acmicpc.net

 


  • 문제

 

 


  • 문제 풀이

백준 10809번 알파벳 찾기는 브론즈 5 난이도의 구현 및 문자열 문제이다. 이 문제에서는 소문자로만 이루어진 문자열 1개가 주어진다. 그리고 각각의 알파벳이 처음 등장하는 위치를 출력하면 된다. 단, 한 알파벳이 등장하지 않으면 -1로 출력을 하면 되는 문제이다. 

 

이 문제를 풀 때 우선 알파벳이 26개가 있으므로 사이즈가 26인 배열 arr를 선언한다. 그리고 모든 값을 -1로 초기화해준다. 그다음에는 문자열 s를 입력받는다. 그리고 각각의 인덱스는 for-loop을 돌려 charAt(index) 함수를 이용해서 접근한다.

 

이 문제에서는 아스키코드를 유용하게 쓸 수 있다. 모든 알파벳은 소문자이고 a의 아스키 값은 97이다. 따라서 arr [s.charAt(index) - 97]을 하면 a는 인덱스 0을 가지게 된다. 그리고 처음 등장하는 알파벳이 나올 때마다 배열을 갱신해주고 마지막에 배열을 iterate 하면서 인덱스들을 출력하면 끝난다.

 

자세한 코드는 밑에 있다.

 


  • 코드

 

import java.io.*;
import java.util.*;
public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int[] arr = new int[26];
        for (int i = 0; i < 26; i++) {
            arr[i] = -1;  //모든 배열의 수를 -1로 초기화
        }
        String s = br.readLine();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (arr[(int)c - 97] == -1) {  //아스키 코드 이용
                arr[(int)c - 97] = i;  //처음 등장하는 인덱스로 갱신
            }
        }
        for (int i = 0; i < 26; i++) {
            System.out.print(arr[i] + " ");
        }
    }
}

 

 

반응형

댓글