본문 바로가기
I am a developer

백준 / Python / 10809 / 알파벳 찾기 / 문제풀이

by Echinacea 2023. 4. 27.
반응형

문제 설명

문제의 포인트

  • 아스키코드로 a-z를 알면 쉽게 풀 수 있다
  • list와 str 값을 가져오는 방식의 차이를 알아야 한다
  • index 함수를 사용할 줄 알아야 한다
  • find 함수를 사용할 줄 알아야 한다
  • 함수 활용에 따라 문제 풀이를 여러 방법으로 할 수 있다.

첫 번째 문제 풀이 방법

  1. 첫 줄에 단어를 입력받아야 한다.

    word = input()
  2. 알파벳을 리스트나 str 형식으로 받아야하는데, 첫 번째로는 리스트 형식으로 받아보겠다.

    alphabet = list(range(97, 123))
    • 해당 값의 결과를 출력해보면
    alphabet = list(range(97, 123))
    print(alphabet)
    print(type(alphabet))
    
    ----------------------------------console------------------------------------
    [97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122]
    <class 'list'>위의 우ㅣ의 
  3. 위의 결과처럼 alphabet 리스트의 값들은 정수 형태로 저장되어 있으므로, chr(i) 라는 기능을 이용해 정수 값을 문자로 인식하게 해야 한다.

    alphabet = list(range(97, 123))
    
    #정수 변환 전
    print(alphabet)
    
    #정수 변환 후
    for i in alphabet:
        print(chr(i), end=' ')
    
    ----------------------------------console------------------------------------
    [97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122]
    a b c d e f g h i j k l m n o p q r s t u v w x y z
  4. 마지막으로 alphabet 리스트에서 입력받은 값을 찾아주는 find 함수를 이용하기만 해도 문제의 출력값이 바로 나온다.

    word = input()
    alphabet = list(range(97, 123)) 
    
    for i in alphabet:
        print(word.find(chr(i)), end=' ')
    
    ----------------------------------console------------------------------------
    qwer
    -1 -1 -1 -1 2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 3 -1 -1 -1 -1 1 -1 -1 -1
    baekjoon
    1 0 -1 -1 2 -1 -1 -1 -1 4 3 -1 -1 7 5 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1

두 번째 문제 풀이 방법

  1. 첫 줄에 단어를 입력받는다.

    word = input()
  2. 두 번째 줄에는 알파벳을 전부 입력해 기다란 str 변수(abc)를 만든다.

    abc ='abcdefghijklmnopqrstuvwxyz'
  3. 두 str 변수 abc를 for문으로 돌려 입력값이 존재할 때는 인덱스 값을 넣고, 존재하지 않을때는 -1을 넣는다. 이 때, str형태인 abc는 리스트가 아니어도 인덱스 값을 뽑아볼 수 있다.

    for i in abc:
        if i in word:
            print(word.index(i), end= ' ')
        else:
            print( -1, end =' ')

주의할 점

abc ='abcdefghijklmnopqrstuvwxyz' 를 사용하는 대신
abc = list(range(97, 123)) 를 사용할 수 있냐면,

답은 no 이다.

이 경우
위 abc는 타입이 str
아래 abc는 타입이 list
list일 경우 위의 코드로 답이 안 나오니 abc가 str이어야한다는 점에 유의해야 한다.

정답 코드

#답1
word = input()
alphabet = list(range(97, 123))     # 아스키코드 숫자 범위

for i in alphabet:
    print(word.find(chr(i)), end=' ')


#답2
word = input()
abc ='abcdefghijklmnopqrstuvwxyz'
# abc2 = list(range(97, 123))

for i in abc:
    if i in word:
        print(word.index(i), end= ' ')
    else:
        print( -1, end =' ')

'''
abc는 되고 abc2는 안 되는 이유?

이 경우 
abc는 타입이 str
abc2는 타입이 list
list일 경우 답이 안 나오니 abc가 str이어야한다는 점에 유의해야 함!
'''
반응형

댓글