728x90
반응형
https://www.acmicpc.net/problem/10809
아스키 코드를 사용해서 풀 수 있는 문제이다.
1. 모든 원소의 값이 -1인 길이가 26인 리스트를 생성한다.
li=[-1]*26
a의 경우 인덱스 0, b의 경우 인덱스 1 ... 이런식으로 매칭할 예정
2. 입력받은 문자열을 알파벳으로 나누어 해당 알파벳의 아스키 코드를 가지고 있는 리스트를 생성한다.
s = list(map(ord, input()))
3. 아스키 코드 값에서 a의 아스키 코드 값을 빼면 해당 알파벳의 인덱스 번호가 나온다.
이를 이용하여 해당 인덱스의 값이 -1이 아닐 때만 위치를 저장한다.
for i in range(len(s)):
if li[s[i]-ord('a')]==-1: #처음 나온 위치를 저장
li[s[i]-ord('a')]=i
전체 코드
li=[-1]*26
s = list(map(ord, input()))
for i in range(len(s)):
if li[s[i]-ord('a')]==-1: #처음 나온 위치를 저장
li[s[i]-ord('a')]=i
for i in li:
print(i, end=" ")
find 메소드를 사용
문자열에 find 메소드를 사용하면 해당 문자가 존재하지 않으면 -1, 존재하면 해당 인덱스를 반환한다.
이를 사용하면 코드를 줄일 수 있다.
s=input()
alpha=[chr(ord('a')+i) for i in range(26)] #모든 알파벳을 저장한다.
for i in alpha:
print(s.find(i), end=" ") #해당 알파벳이 존재하지 않으면 -1, 존재하면 인덱스 출력력
728x90
반응형
'백준 알고리즘 > 문자열' 카테고리의 다른 글
[백준 1411][파이썬] 비슷한 단어 (0) | 2023.07.11 |
---|
댓글