For Programmer

백준 10809번 파이썬 문제풀이(문자열 - 알파벳 찾기) : find함수 이용하지 않고 풀기 본문

코팅테스트/백준 문제 모음

백준 10809번 파이썬 문제풀이(문자열 - 알파벳 찾기) : find함수 이용하지 않고 풀기

유지광이 2021. 9. 3. 14:43
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
Comments