포시코딩

[백준][구현] 10809 - 알파벳 찾기 본문

자료구조알고리즘/문제풀이

[백준][구현] 10809 - 알파벳 찾기

포시 2023. 5. 8. 18:29
728x90

문제

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

 

10809번: 알파벳 찾기

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

www.acmicpc.net

시간 제한과 메모리 제한도 넉넉하기 때문에 

파이썬에서 문자열을 아스키 코드로 변환하는 함수를 알면 쉽게 풀 수 있는 문제다.

난이도도 solved.ac 기준 브론즈 2로 낮은 편에 속한다.

 

내 풀이

S = input()

for x in range(ord('a'), ord('z')+1):
  print(S.find(chr(x)), end=' ')

알파벳의 아스키 코드 변환 함수인 ord를 통해 a~z 까지의 값을 구하고

list의 find 함수를 사용하여
해당 문자가 문자열의 몇 번째에 위치했는지, 없다면 -1를 리턴하게끔 만들었다.

 

이렇듯 간단히 풀긴 했지만 함수의 도움을 많이 받았기에 

아래 코드처럼 다른 방법으로 푼 풀이도 흥미로워 포스팅하게 되었다.

 

다른 풀이

S = input()
arr = [-1] * 26  # a부터 z까지의 알파벳은 26개

for i in range(len(S)):
  index = ord(S[i]) - ord('a')
  if arr[index] == -1:
    arr[index] = i
    
for x in arr:
  print(x, end=' ')

마찬가지로 파이썬의 함수를 썼지만 ord만을 사용했다. 

 

출력 결과를 a부터 z까지의 알파벳들의 처음 등장 위치를 구하는 것이므로

a~z의 등장 위치를 -1로 초기화한 리스트를 준비한다. 

 

그 후, ord를 통해 a~z가 0~25의 index 값을 가지게 해서 만약 arr의 해당 위치가 -1이면

즉, 처음 등장했다면 등장 위치로 바꿔준다. 

 

이렇게 a ~ z 문자들에 대해 문자열 S에서의 등장 위치를 구할 수 있다. 

728x90