냥코센세이
[백준] 10809 알파벳 찾기(파이썬) 본문
처음에 알파벳 찾기라 했을 때 솔직히 금방 풀릴 줄 알았는데 뭔가 하나하나씩 조건을 맞춰야하는게 좀 까다로웠다.
전체 코드 완성하기 까지는 대략 30분 정도 걸린 듯 하다.
계속해서 한 문자나 글자씩 쪼개서 비교해야 하는 문제들이 나온다.
코드를 분석해 보면
s = input()
s = list(map(str,str(s))) #한 문자씩 쪼개기
lst = [-1]*26 #디폴트 값 -1 26개 생성
우선 input을 통해 원하는 단어를 입력받는다.
그리고 list와 map함수를 통해 한 문자씩 쪼개서 리스트 형태로 저장한다.
lst 에 디폴트 값인 -1을 총 알파벳 개수만큼 저장해준다. (총 26개)
for i in range(len(s)):
a = ord(s[i]) #ord : 입력된 문자의 아스키코드값 구하기
입력된 단어의 길이만큼 for구문을 반복해주고,
한 글자씩 해당 아스키 코드 값을 변수 a에 저장해 준다.
for j in range(97,123):
if a == j:
if lst[j-97] == -1: #처음 나오는 수 일때만
lst[j-97] = i
아스키 코드에서 알파벳 소문자는 97번부터 122번까지 인데 for구문을 통해 반복해주면서 저장된 a값과 비교해준다.
if를 통해 같은 j값을 찾아주고 문제에서 처음 나오는 수 일때만 그 위치를 저장해주라 했기 때문에
다시 한번 if를 통해 해당 위치의 수가 디폴트인 -1인지를 검사해준다.
그 다음 lst에서 해당 위치는 j에서 97을 빼주면 해당 위치가 나오고 거기에 i값을 넣어준다.
이때 i값은 입력된 단어의 위치값이다.
따라서 전체적인 코드를 보면 이렇게 나온다.
s = input()
s = list(map(str,str(s))) #한 문자씩 쪼개기
lst = [-1]*26 #디폴트 값 -1 26개 생성
for i in range(len(s)):
a = ord(s[i]) #ord : 입력된 문자의 아스키코드값 구하기
for j in range(97,123):
if a == j:
if lst[j-97] == -1: #처음 나오는 수 일때만
lst[j-97] = i
print(' '.join(map(str,lst))) #*lst,sep=' '
좋은 코드인것 같진 않지만 내가 할수있는 최대한으로 해보았다...
'백준 > 단계별로 풀어보기' 카테고리의 다른 글
[백준] 1157번 단어 공부(파이썬) (0) | 2022.08.15 |
---|---|
[백준] 1297번 TV 크기(파이썬) (0) | 2022.08.15 |
[백준] 11720 숫자의 합(파이썬) (0) | 2022.08.11 |
[백준] 4673 셀프 넘버 (파이썬) (0) | 2022.08.11 |
[백준] 15596 정수 N개의 합 (파이썬) (0) | 2022.08.11 |