본문 바로가기

알고리즘

[백준] 10809번: 알파벳 찾기 (java, python)

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

 

10809번: 알파벳 찾기

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

www.acmicpc.net


💡주의 사항

중복된 알파벳이 있다면 처음 등장하는 위치를 신경쓰면 된다.

테스트 케이스 baekjoon의 o도 처음 등장하는 인덱스(5)만 저장된 것을 볼 수 있다.


🗒 풀이

java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) throws IOException {
        int[] alphabet = new int[26];

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();

        Arrays.fill(alphabet, -1);

        for (int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);

            if (alphabet[ch - 97] == -1) {
                alphabet[ch - 97] = i;
            }
        }

        for (int a: alphabet) {
            System.out.print(a + " ");
        }

    }
}

알파벳을 저장할 26개의 정수형 배열을 생성한다.

Arrays.fill(alphabet, -1)로 알파벳 배열을 -1로 초기화한다.

for문을 돌면서 문자열 s의 각 인덱스에 해당하는 문자를 받고(charAt()) 일치하는 곳의 자리 수를 저장해준다. 97을 빼는 이유는 소문자 'a'의 아스키 코드값이 97이고, 알파벳 배열의 인덱스는 0부터 시작이므로 이를 맞춰주기 위함이다.

alphabet 배열이 -1 인 것은 처음 등장했다는 의미이므로, 일치하는 알파벳 배열의 자릿수가 -1 이라면 자릿값을 저장해준다.


python

s = input()
alphabet = [-1] * 26
for i in range(len(s)):
    ch = ord(s[i])

    if alphabet[ch - 97] == -1:
        alphabet[ch - 97] = i

for i in alphabet:
    print(i, end=' ')

파이썬에서는 charAt() 함수가 없다.

대신 ord(c) 함수를 사용하는데, 파라미터 c의 유니코드 정수값을 반환해준다.

만약, 정수(int)값을 character로 반환하고 싶을 때는 chr(i)를 사용한다.

매커니즘은 java 코드와 동일하다.