For Programmer
백준 10809번 파이썬 문제풀이(문자열 - 알파벳 찾기) : find함수 이용하지 않고 풀기 본문
728x90
우선 find 함수를 이용하면 굉장히 쉽게 풀 수 있다.
n = input()
alphabet = list(range(97,123)) # == list(range(ord("a"),ord("z")+1)
for x in alphabet:
print(n.find(chr(x)),end=" ") #문자열 내부에 (chr(x))의 값이 있으면 해당문자열의 첫번째 위치를 반환 없으면 -1 반환
-> find함수는 문자열의 내부에 해당값이 존재하면 그 값이 존재하는 첫번째 위치를 반환해주며 없다면 -1을 출력한다. (chr()함수는 chr의 인자로 전달되는 아스키코드값을 다시 문자로 바꿔준다.)
단, 나는 find함수 존재를 몰랐기 때문에 해당 find함수를 구현할 수 밖에 없었다. 구현은 다음과 같다.
n = input()
array = list(map(ord, n)) # 입력받은 문자열을 아스키코드로 변환
array2 = [-1] * (ord("z") - ord("a") + 1) # 해당문자열이 존재하는 위치를 담을 배열 선언
index = 0 # array2에 이용할 index값 생성
for i in range(ord("a"), ord("z") + 1): # a - z 까지 돌기위한 반복문 설정
for j in range(array.__len__()): #각각의 문자(a-z) 가 입력받은 문자열의 어디에 위치하는지 해당 위치값을 찾기위한 반복문설정
if i == array[j]: # 만약 a - z 의 문자가 해당 문자열 내부에 존재한다면
array2[index] = j #그 위치값을 array2의 배열의 위치에 담아준다음
break # break 가 없다면 같은 문자가 나오면 그 뒤에값이 저장되기 때문에 앞에값만 저장하기 위해서 break 걸어주기
index += 1 # a = 0, b = 1 , c = 2 와 같이 array2 리스트에 index를 설정해주기 위해 각각의 문자의 반복문이 끝났다면 index에다가 +1 해주기
for i in array2:
print(i,end=" ") #array2 값 출력
-> 각각의 코드마다 주석을 달아놓았다.
728x90
'코팅테스트 > 백준 문제 모음' 카테고리의 다른 글
백준 1157번 파이썬 문제풀이(문자열 - 단어공부) (0) | 2021.09.03 |
---|---|
백준 2675번 파이썬 문제풀이(문자열 - 문자열반복) (2) | 2021.09.03 |
백준 11654번 파이썬 문제풀이(문자열 - 아스키코드) (0) | 2021.09.03 |
백준 1065번 파이썬 문제풀이(함수 - 한수) : 점화식으로 풀어보기 (0) | 2021.09.01 |
백준 4673번 파이썬 문제풀이(함수:셀프넘버) (0) | 2021.09.01 |
Comments