Baekjoon 10809번 알파벳 찾기 python
https://www.acmicpc.net/problem/10809
첫 시도
getStr=input() alp=[] number=[] for i in range(ord('z')-ord('a')+1): num = ord('a')+i alp.append(chr(num)) number.append(-1) """ alp='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'] number=[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1] """ for i in range(len(getStr)): for j in range(len(alp)): if getStr[i] == alp[j]: if number[j] == -1: number[j]=i printStr='' for i in range(len(number)): printStr += str(number[i])+' ' print(printStr)
우선 각 입력문자에 맞게 조건을 걸고싶어서 alp와 number를 list 형태로 정렬한 후
입력받은 문자 순서에 맞게 비교 정렬하는 과정을 거쳐 마지막에는 string으로 나열해서 출력했다.
그러나 이 방식을 가만히 생각해보면 리소스 소모가 매우 크다는 사실을 알 수 있다.
겨우 단어 한개때문에 알파벳을 전부다 돌아야하는 for문을 2번쓰는 것이 메모리를 낭비하게한다. 때문에 하다보니 생각하게된 dictionary 형태가 더 편하다는 생각을 하게 되었고
Dictionary에 맞게 정돈하면 다음과 같다.
getStr = input() alp = {chr(i):-1 for i in range(ord('a'), ord('z')+1)} for i in range(len(getStr)): if alp[getStr[i]] == -1: alp[getStr[i]] = i for key in sorted(alp.keys()): print(alp[key], end=' ')
리소스가 훨씬 줄어들고 코드 길이 역시도 많이 줄은 것을 확인할 수 있다.
더욱이 여기서는 print(alp[key], end=' ')를 통해 굳이 string으로 만들지 않고도 나열할 수 있는 방법을 알아냈다.
결론
1. 단어별 숫자를 찾거나 횟수, 위치를 찾는 방식에는 Dict 형태가 list 2개보다 훨씬 좋다.
2. print(~, end=' ')를 통해 끝 부분을 개행문자인 \n이 아닌 다른 방식을 추가하여 나열할 수 있는 법을 알 수 있다.
3. ord(char), chr(Ascii_number)를 잘 사용해서 dict만들기가 가능하다.
ALL RIGHT RESERVED TWINSTARINFO