[Python/파이썬] 백준 알고리즘 10809번 / 알파벳 찾기

[Python/파이썬] 백준 알고리즘 10809번 / 알파벳 찾기

 

문제 링크: https://www.acmicpc.net/problem/10809

 

10809번: 알파벳 찾기

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

www.acmicpc.net

 

 

 


최종 소스코드

1. find 함수를 사용하지 않은 풀이

word = input()
out = []
for j in range(97, 123):  # a = 97 z = 122
    a = -1
    for i in range(len(word)-1,-1,-1):
        if ord(word[i]) == j:
            a = i
    print(a, end=' ')

 

2. find 함수를 사용한 풀이

word = input()
alp = list(range(97, 123))# a:97 z:122

for i in alp:
    print(word.find(chr(i)), end=' ')

 


<풀이>

이번 문제는 find 함수를 이용하면 쉽게 풀 수 있는 문제이다. find 함수를 사용하지 않으면 '처음 등장하는 위치를 표시' , '포함돼있지 않다면 -1을 출력' 과 같은 부분을 모두 신경 써야 한다. find 함수는 이와 같은 작업을 알아서 해주는 함수이다.

1. find 함수를 사용하지 않은 풀이

1번 풀이는 입력받은 단어를 ord 함수를 통해 아스키코드로 바꾼뒤 a~z의 아스키코드와 일치하는지 조건문을 사용해 확인했다. 이 때 처음 등장하는 위치를 표시하기 위해 word[i]에서 i를 역순으로 사용했다. 만약 일치하는 아스키코드가 없을 경우 -1을 출력하기 위해  초깃값을 -1로 하였다.

2. find 함수를 사용한 풀이

find 함수는 문자열에서만 사용 가능하므로 chr을 사용해 아스키코드를 문자로 바꿔준다.

3. 파이썬 줄바꿈 제거

파이썬의 출력 함수는 end='\n'를 한 것처럼 자동으로 줄바꿈을 해준다. 이 줄바꿈을 없애고 이어지게 출력 하도록 바꾸려면  end='  '를 사용해주면 된다.