출처 : 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 |