[백준] 10809 : 알파벳 찾기


wow..

문제

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

입력

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

출력

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

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




나의 첫번째 제출 답안

from string import ascii_lowercase

s=list(input())
a=list(ascii_lowercase)
locate=[]

for i in a:
    if i in s:
        locate.append(s.index(i))
    else:        
        locate.append(-1)
print(locate, end=' ')

알파벳 소문자를 사용하기 위해(하나하나 입력하기 귀찮았다..) ascii_lowercase를 import해줬다.
idle에서 테스트 했을 때 출력은 올바르게 나왔으나 오답이라고 떠
모듈을 사용하면 안되는건가?(아님)해서 두번째처럼 제출했다.

나의 두번째 제출 답안

a='abcdefghijklmnopqrstuvwxyz'
s=list(input())
locate=[]
for i in a:
    if i in s:
        locate.append(s.index(i))
    else:        
        locate.append(-1)
print(locate, end=' ')

다른 부분은 동일하나, 알파벳 소문자 문자열을 선언해주었다.
출력은 예시와 동일하게 나왔으나나 여전히 오답이였다.(멘붕)

나의 세번째 제출 답안

s=list(input())
a='abcdefghijklmnopqrstuvwxyz'
locate=[]
for i in a:
    if i in s:
        locate.append(s.index(i))
    else:        
        locate.append(-1)
print(locate, end=' ')

문제를 다시 읽어봤다.
"첫째 줄에 단어 S가 주어진다"
첫째줄에 입력을 넣어줘야 되는건가?
해서 위와 같이 수정 후 제출했다.
결과는 오류 발생 뭐가 문제지..

나의 최종 제출 답안

S=input()
a='abcdefghijklmnopqrstuvwxyz'
for i in a:
    if i in S:
        print(S.index(i), end=' ')
    else:
        print(-1, end =' ')

혹시 몰라 locate 배열을 없애고 바로 출력하도록 바꿔 코드 길이를 줄였다.
더불어 입력을 받으며 list로 변환해서 그런 것인가? 싶어 list를 없애고, 변수 이름을 s에서 S로 바꿔 제출하였다.
(list로 변환할 필요가 없는 코드이다. 변환해주어도 상관은 없으나 굳이?
문제를 처음 접근했을 때는 입력받은 문자열을 각각의 알파벳으로 분리해주기 위해 list로 변환해주었으나
if i in s 로 순차적으로 접근하므로 필요가 없다.
코드를 계속 수정하다보니 미처 발견하지 못한 실수이다.)

결과는 정답이다.

오늘의 반성..
문제를 꼼꼼히 읽자..!
엄청 어려운 문제는 아니나 실수로 오답도 나오고 했던 문제였다.
반성

좋은 웹페이지 즐겨찾기