[백준] 10809 알파벳 찾기

morecodeplease·2025년 1월 22일
0

백준

목록 보기
8/13
post-thumbnail

🌭 문제 설명

  • 알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.

🍗 제한 사항

  • 없음

🎁 입출력 예시

  • 첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.

  • 각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다.

  • 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.


😎 나의 풀이

n = input() # baekjoon

check = [-1] * 26

for i in range(len(n)):
  index = ord(n[i]) - ord('a') # 101 - 97 
  
  if(check[index] == -1):
    check[index] = i
  # check[1] = 0
  # check[0] = 1
  # check[4] = 2

for i in range(len(check)):
  print(check[i], end=" ")
  1. 알파벳 개수 +1 만큼 -1을 담은 check 배열 생성
  2. 입력받은 알파벳을 check 배열에 매핑시키기 위해 ord 메소드를 이용해서 ASCII 값으로 변환
    예 : n[i]b 이면 98 이고 , a97 이므로 98 - 97 = 1index에 위치하게 된다.
  3. check[index]-1이면 해당 알파벳이 처음 등장한 것이므로 현재 위치 i를 저장
  4. check 배열을 순회 해서 줄바꿈없이 출력

🧵 다른 풀이

word = input()
for i in 'abcdefghijklmnopqrstuvwxyz':
    print(word.find(i))
  1. 단어 입력 받기
  2. 실제 알파벳을 문자열로 순회해서 find 메서드를 통해 문자열에서 특정 문자가 처음 등장하는 인덱스를 반환, 문자가 문자열에 없으면 -1을 반환
  3. 입력 baekjoon이라면:
    'a'는 1번 인덱스 → 출력: 1
    'b'는 0번 인덱스 → 출력: 0
    'c'는 없음 → 출력: -1

  • 다른 풀이가 훨씬 간결하고 코드도 깔끔해 보이고 find메소드, ord를 통한 ASCII 코드 변환 방법도 알게 되었다❗
profile
Everyday's a lesson

0개의 댓글