Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

냥코센세이

[백준] 10809 알파벳 찾기(파이썬) 본문

백준/단계별로 풀어보기

[백준] 10809 알파벳 찾기(파이썬)

yangko 2022. 8. 11. 15:36

처음에 알파벳 찾기라 했을 때 솔직히 금방 풀릴 줄 알았는데 뭔가 하나하나씩 조건을 맞춰야하는게 좀 까다로웠다.

전체 코드 완성하기 까지는 대략 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=' '

좋은 코드인것 같진 않지만 내가 할수있는 최대한으로 해보았다...