개발 공부/알고리즘 문제풀이

[백준] 10809. 알파벳 찾기

5묘 2022. 7. 18. 23:52
 

10809번: 알파벳 찾기

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

www.acmicpc.net


# 10809 알파벳 찾기
# 우선 알파벳 개수 만큼 -1을 채워 넣은 리스트를 만든다.(알파벳은 26개)
# 이렇게 하면 -1이 아닌 숫자들은 자릿수가 채워진 것이고, 한번도 등장하지 않은 알파벳의 자리수는 -1로 남아있다.
arr = [-1 for _ in range(26)]

# 아스키 코드로 a는 97, z는 122이다.
# 그래서 word를 반복문을 돌리며 해당 알파벳을 ord()를 사용해 아스키 숫자로 바꾼 후,
# 거기서 97을 뺀 인덱스 위치에 넣는 식으로 리스트에 넣어주겠다.
# (예: 'a'== 97이므로 97-97=0이니 arr[0]에 a가 word에서 첫번째로 나온 인덱스를 넣는다.)
word = input()
for i in range(len(word)):
    # 만약 이미 첫번째 자리가 저장되고, 두번째로 알파벳이 나온 것이라면
    # continue 처리를 해서 첫번째 자리값만 저장되도록 한다.
    if arr[ord(word[i]) - 97] >= 0:
        continue
    else:
        arr[ord(word[i]) - 97] = i

for a in arr:
    print(a, end=' ')

이 문제는 26개의 알파벳 숫자 만큼 -1로 채워진 배열을 미리 만들고, 문자를 ASCII 코드로 바꾼 후 97(a의 아스키코드)만큼을 뺀 인덱스 위치에 자리수를 넣는 식으로 풀었다.

문자를 ASCII 숫자로 바꾸는 ord()와 숫자를 다시 문자로 바꾸는 chr() 내장함수를 사용했는데, 파이썬 말고 다른 언어에도 charAt() 같이 문자를 정수형으로 바꿔주는 숫자를 사용해 푼 경우가 많은 것 같다.

'개발 공부 > 알고리즘 문제풀이' 카테고리의 다른 글

[백준] 1157. 단어 공부  (0) 2022.07.19
[백준] 2675. 문자열 반복  (0) 2022.07.18
[백준] 11720. 숫자의 합  (0) 2022.07.18
[백준] 11654. 아스키 코드  (0) 2022.07.18
[백준] 1065. 한수  (0) 2022.07.18