코딩테스트/기초

백준 10809 알파벳 찾기 - python

math_tbro 2022. 1. 2. 18:04

 

출처 : https://www.acmicpc.net/problem/10809

 

10809번: 알파벳 찾기

각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출

www.acmicpc.net

 

풀이 : 2가지 풀이가 있다.

# My solution
s = input()
alphabet = ['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']
ans = []
for i in alphabet:
    if i in s:
        b = s.index(i)
        print(b, end=' ')
    else :
        print(-1, end=' ')

내 풀이는 코테를 열심히 연습하는 풀이이다. 반면 밑에 풀이는 출제자의 의도를 관통 하는 풀이 같다.

 

내 풀이부터 리뷰하겠다.

 

1. 입력값을 str로 받아와야 하므로 input() 만을 써준다.

 

2. 그다음 알파벳 리스트를 만들어야 하므로 좀 귀찮지만... 저렇게 리스트를 만들어줬다.

 

3. ans = []는 저 리스트에 값들을 넣으려고 했는데 여기서는 리스트로 출력 하면 안되기 때문에 저건 쓰면 안된다. 

근데 왜 썼냐?? 필요없음을 강조하기 위해 썻다( 사실 수정하기 귀찮다)

 

4. 그 다음 for 문으로 alphabet 하나하나를 가져온다. 그리고 if i in s: 를 이용한다.

이것의 의미는 알파벳 하나하나 받아온 값이 s에 있어? 를 물어본다.

 

그렇다고 하면 index를 이용해준다. (밑에 자세히 설명하겠지만 index와 find는 역할이 비슷하지만 Index는 그 값이 없다면 출력 오류를 나타내고 find는 -1을 출력한다. 그러므로 이 문제는 find가 의도가 맞다.)

index 는 ()괄호 안에 있는 값이 s에 몇 번째 있는지 출력 해준다. 

그리고 print(b, end = ' ')를 써주면 출력값 사이에 공백만을 나타내주기에 1 0 -1 이렇게 출력 될것이다.

그리고 i 가 s에 없으면 -1 을 출력해주면 답이 이쁘게나온다.

 

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

for x in alphabet :
    print(word.find(chr(x)))

 

다른 사람의 풀이이다.

 

1. 똑같이 입력값을 받아온다.

2. 그리고 아스키값을 이용하기 위해 97~122를 받아온다.

3. 그 다음 숫자 97~122에서 하나씩 받아오면서 chr(x) (아스키 - > 숫자 함수) 를 이용해서 알파벳으로 바꾼다음 

find를 써서 print 해준다. 

4. 위에서 설명했듯이 index와 find 둘 다 궁금한 값이 어느 위치에 있는지를 알려주는 출력함수 인데 찾는 값이 존재하지 않으면 출력오류를 내는게 index / -1을 출력하는게 find다

'코딩테스트 > 기초' 카테고리의 다른 글

백준 1157 단어공부 - python  (0) 2022.01.02
백준 2675 문자열 반복 - python  (0) 2022.01.02
백준 11720 숫자의 합 - python  (0) 2022.01.02
백준 11654 아스키코드  (0) 2022.01.02
백준 1065 한수 - Python  (0) 2022.01.01