규도자 개발 블로그

[백준/10809/파이썬3(python3)] 알파벳 찾기 본문

알고리즘/풀이

[백준/10809/파이썬3(python3)] 알파벳 찾기

규도자 (gyudoza) 2018. 9. 27. 22:36

문제

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

입력

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

출력

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

입출력 예

입력출력
baekjoon1 0 -1 -1 2 -1 -1 -1 -1 4 3 -1 -1 7 5 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1

풀이

alphabet_string = 'abcdefghijklmnopqrstuvwxyz'
alphabet_dictionary = {}
for i in range(len(alphabet_string)):
    alphabet_dictionary[alphabet_string[i]] = -1

user_input_word = input()

for i in range(len(user_input_word)):
    for j in range(len(alphabet_string)):
        if user_input_word[i] == alphabet_string[j] and alphabet_dictionary[user_input_word[i]] == -1:
            alphabet_dictionary[user_input_word[i]] = i

string_to_print = ''

for i in range(len(alphabet_dictionary)):
    string_to_print += str(alphabet_dictionary[alphabet_string[i]]) + ' '
print(string_to_print)

설명

말만 어렵지 별 거 아닌 문제이다. 말 그대로 입력된 단어에 해당하는 알파벳이 오면 단어에서 해당 알파벳이 있던 인덱스로 교체해주면 되는 문제이다. 그렇게 교체해준 뒤에 단어를 입력받으면 해당 단어의 알파벳을 각각 딕셔너리와 비교하여 해당 알파벳이 키값으로 들어올 때 그 밸류값이 -1이면 해당 알파벳의 인덱스로 교체해주면 된다. 이미 교체된 알파벳은 또 교체하지 않기 위해(예제에서는 o가 연속해서 두번 입력된 경우) -1일 경우에만 해당 인덱스로 교체한다는 조건만 추가해주면 아주 간단하다.

내가 푼 과정은 이렇다.

  1. 알파벳 순서대로 문자열을 만든다.
  2. 해당 문자열을 key값, -1을 value값으로 하는 파이썬 딕셔너리를 만든다. (파이썬 딕셔너리는 key와 value로 이루어진, JAVA에선 map을 생각하면 쉽고, 웹 프로그래머라면 흔하게 접할 수 있는 JSON을 생각하면 쉽다.)
  3. user_input_word에 유저가 입력하는 단어를 받는다.
  4. 해당 단어를 순회하면서 알파벳 딕셔너리의 키값 값들과 일일히 비교하여 키값과 같은 알파벳일 때 해당 딕셔너리의 -1로 초기화했던 value값을 해당 인덱스로 바꿔준다.
  5. 반복문이 끝나면 단어의 알파벳 순서대로 value값이 바뀐 알파벳 딕셔너리가 남는다.
  6. 출력 폼을 맞추기 위해 문자열에 붙여주고 출력한다.

끄읕

 

 

Comments