문제 링크
https://www.acmicpc.net/problem/10809
나의 코드 (Python)
S = list(input())
alpha = [-1] * 26 # 알파벳의 개수 26개
cnt = 0 # 입력값의 위치를 카운팅 할 변수
# 아스키 코드 : 97 ~ 122 (a ~ z)
for i in S:
a = ord(i) - 97
if alpha[a] == -1: # -1인 경우 (처음 들어온 값만 변경)
alpha[a] = cnt
cnt += 1
# 결과
for j in alpha:
print(j, end=" ")
이 문제는 알파벳 개수 26개만큼 -1을 세팅한 배열을 만들어 주고 입력값의 위치를 카운팅 할 변수가 필요합니다.
그리고 이를 아스키코드로 바꾸는 ord()를 사용하여 아스키코드로 변환하고 여기에 소문자 a의 시작 값인 97을 빼주어 입력값이 26개의 배열과 매핑하게 해 줍니다. alpha[0]은 a, alpha[1]는 b
이번 문제에서 가장 오류를 많이 실수 많이하는 부분은 "baekjoon"에서 "oo"부분이라고 생각합니다. 이때 문제에서 주어진 출력 값을 확인해보면 처음에 들어온 o의 순서만을 기록하고 있습니다.
이를 해결하는 부분이 if alpha[a] == -1: 입니다. 이런 조건문을 넣어준다면 이미 변경된 값은 다시 변경하지 않습니다.
'코딩공부 > 백준 (python)' 카테고리의 다른 글
[백준 1157] 단어 공부 (Python) (0) | 2022.03.14 |
---|---|
[백준 2675] 문자열 반복 (Python) (0) | 2022.03.09 |
[백준 11720] 숫자의 합 (Python) (0) | 2022.03.09 |
[백준 11654] 아스키 코드 (Python) (0) | 2022.03.09 |
[백준 1065] 한수 (Python) (0) | 2022.03.01 |
댓글