코딩 테스트 (Python)/백준
[백준] 10809번 알파벳 찾기 (Python)
hihyuk
2024. 1. 3. 13:13
10809번: 알파벳 찾기
각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출
www.acmicpc.net
더보기
문제
알파벳 소문자로만 이루어진 단어 S가 주어진다.
각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를,
포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.
출력
각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다.
만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.
과정
- 소문자로 이루어진 영어 단어를 입력받는다.
- -1로 이루어진 알파벳 a-z까지의 리스트를 만든다.
- 입력받은 단어의 각 요소가 있는 위치의 숫자가 -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
풀이
import string
S = input()
result = [-1]*len(string.ascii_lowercase)
for i in range(len(S)):
idx = ord(S[i]) - 97
if result[idx] == -1:
result[idx] = i
print(' '.join([str(num) for num in result]))
한 줄씩 코드 해석 해보기
import string
- string 모듈: string.ascii_lowercase를 사용하기 위한 import
S = input()
- 첫째 줄에 단에 S가 주어져야함.
- input() 사용자가 입력한 값을 변수에 저장하는 함수
result = [-1]*len(string.ascii_lowercase)
- string.ascii_lowercase 영어 소문자를 모두 출력
- len() 문자열의 길이를 반환하는 함수
- result = [-1] * [1, 1, 1, ... , 1]
- result = [-1, -1, -1, ... -1]
for i in range(len(S)):
- for문을 i = 0 부터 S(입력받은 값)의 문자열 길이 만큼 반복
idx = ord(S[i]) - 97
- ord(문자) 문자를 윤코드 정수로 변환
- ex) ord('a') = 97 / ord('b') = 98 /...
- ord(S[i]) 값을 넣고 -97을 해주면 만약 S[i] 값이 a 이면 97 - 97 로 0을 반환
- 즉, 알파벳 순서대로 인덱스 위치를 반환
if result[idx] == -1:
- result값의 알파벳 위치의 인덱스가 -1인 경우
result[idx] = i
- 그 자리의 숫자를 S(입력받은 값)의 인덱스 값으로 변환
print(' '.join([str(num) for num in result]))
- 결과값을 공백을 포함하여 하나의 문자열로 만들어서 출력