Dev/PS

[백준/BOJ] 10809번: 알파벳 찾기 (Python) 풀이, 딕셔너리 사용

KangJerry 2024. 6. 6. 23:39

Baekjoon Online Judge (BOJ) 의 10809번 문제인 '알파벳 찾기' 를 풀어보았다. (딕셔너리 사용)
 
[문제 정보]
https://www.acmicpc.net/problem/10809


문제 개요:

알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.


[ 입력 ]
첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.

[ 출력 ]

각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다.

만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.

 

알파벳 '소문자' 로만 이루어진 단어 S의 각각 알파벳에 대해 처음 등장하는 위치를 출력하면 된다.예시) baekjoon 을 입력받았으면, b는 0번째 위치에 처음 등장, a는 1번째 위치에 처음 등장하는 알파벳인 것이다.

 

나는 입력받은 문자의 각각의 위치를 저장해야겠다는 생각 즉, key(key에는 각 알파벳)와 value(value에는 각 알파벳이 처음 등장하는 위치)를 저장해야겠다는 생각에 파이썬의 자료구조 기법 중 하나인 dictionary를 사용하였다.

 

하지만 풀고 나서 다른 사람들의 풀이를 보니 딕셔너리를 사용한 분들은 거의 없었다... 하긴 단계부터 '문자열' 단계인데 내가 잘못 생각했던 것 같기도 하다. 그래도 알고리즘에 문제는 없어서 리뷰를 작성해보기로 했다.

 

알고리즘:

  1. S(단어)를 입력받고, 단어의 각 알파벳의 처음 등장한 위치를 저장하기 위하여 빈 딕셔너리를 loc(location) 함수에 초기화시킨다.
  2. 입력받은 단어의 길이만큼 반복하는 반복문을 만들어주고, 딕셔너리에 단어별로 위치를(순서대로 0번째부터 i번째까지) 저장해준다. (* 단어 중 중복된 알파벳은 어차피 처음 등장한 위치가 필요한 것이기에 의미가 없으므로 딕셔너리에 해당 알파벳이 이미 있으면 건너뛰는 코드를 작성해준다.)
  3. 알파벳 개수인 26번 반복하는 반복문을 만들어준다.
  4. 파이썬의 딕셔너리는 없는 key에 접근하려고 하면 KeyError가 발생하므로, 예외 처리를 위한 try except 구문을 사용하여 평소에는 알파벳 별로 loc의 키 값과 일치하는 알파벳의 위치를 출력해주고, 예외가 발생할 경우(입력받은 단어 중 없는 알파벳 차례일 경우)에는 입력받은 단어에는 포함되어 있지 않은 알파벳이므로 -1을 출력한다.

 

코드:

S = input()
loc = {}

for i in range(0, len(S)):
    if S[i] in loc: continue
    loc[S[i]] = i

for i in range(0, 26):
    try:
        print(loc[chr(97+i)], end=' ')
    except:
        print(-1, end=' ')

위 풀이에 대한 질문이나 틀린 정보가 있다면 댓글로 말씀해 주시면 감사하겠습니다!
 
 

728x90