[python] 백준 10809 : 알파벳 찾기

728x90

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

 

10809번: 알파벳 찾기

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

www.acmicpc.net


풀이 1 : 아스키 코드를 이용한 방법

S = input()
arr = []
for i in range(26):
    arr.append(-1)
for i in range(len(S)):
    if arr[ord(S[i]) - 97] == -1:
        arr[ord(S[i]) - 97] = i
for i in arr:
    print(i, end = ' ')

처음에 26가지 값을 -1로 설정하고 ord()함수로 해당 문자들의 유니코드 정수값을 반환받는다.

소문자의 범위는 97~122까지므로 97을 더 빼면 0~25까지의 정수값을 구할 수 있다.

값이 중복되는 경우를 제외하기 위해 최초 변경시에만 값을 바꿀 수 있게 만들었다.

 

 

풀이 2 : find()함수를 이용한 방법

 

find()는 문자열에서 특정 문자가 몇 번째에 위치해 있는지에 대한 값을 반환한다.(문자열에서만 가능하므로 리스트, 튜플과 같은 iterable 자료형에서는 index()함수를 사용해야 한다.)

찾는 문자가 없을 경우 -1을 반환한다.(index()함수는 AttributeError가 발생한다.)

 

chr()함수는 아스키코드 숫자를 문자로 변환하는 함수이다. 97~122의 값이 a~z로 바뀌게 된다.

S = input()
arr = list(range(97, 123))

for i in arr:
    print(S.find(chr(i)))

 

728x90

'알고리즘 문제 풀이' 카테고리의 다른 글

[python] 백준 2231 : 분해합  (0) 2022.02.02
[python] 백준 1157 : 단어 공부  (0) 2022.01.29
[python] 백준 3052 : 나머지  (0) 2022.01.28
[python] 백준 2920 : 음계  (0) 2022.01.28
[python] 백준 2908 : 상수  (0) 2022.01.27