-
파이썬, 알고리즘... 뭔말이야..Python 2024. 7. 11. 02:55
문제: 알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.
하.. 문제부터 이해를 안갔다.... 뭔말이야..ㅠㅠ
겁이 났다. 아직 갈길이 먼데..
일단 스스로 문제를 풀어보라는 강사님의 말씀에 한참을 바라보다가 지피티를 찾았다... 문제가 뭘 말하는지부터 좀 알려달라고...
그제서야 문제가 뭘 말하는지 이해가 됐다.
그치만.. 훈련이 안되어 있기 때문일까.. 처음이어서 일까... 또 한참을 생각만 했다.
스스로는 풀지 못했고.. 이해만 했다...
import string def get_idx(word): # point 1. ord result = [-1]*len(string.ascii_lowercase) for i in range(len(word)): idx = ord(word[i]) - 97 if result[idx] == -1: result[idx] = i print(' '.join([str(num) for num in result])) get_idx('baekjoon')
일단, 아래 코드를 모두 주석처리 해주고 string.ascii_lowercase를 프린트해봤다.
알파벳 a부터 z까지의 str값이 출력된다.
이 문제에서 알파벳이 표기되는 디폴트값이 -1 이니까 일단 [-1]이라는 리스트를 만들어주는데 알파벳 개수만큼 만들어줘야하니까 알파벳 개수를 곱해주면 되는거다.
그래서 [-1]*len(string.ascii_lowercase) 이걸 출력해보면
[-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]
이렇게 나온다.
이제 주어진 단어를 표기해야하니까 임의의 단어 word 를 for문으로 돌려서 스펠링 하나하나를 확인한다.
여기서 ord 는 문자를 숫자로 만들어주는 함수다. 앞으로 기본적인 아스키 (ASCII) 코드는 외워두는게 좋을 것 같다.
26개의 알바벳을 인덱스 값으로 표기해주면 된다.
[-1 (a = 0), -1 (b = 1), -1 (c = 2) .....] 이렇게 되도록 하기 위해
for i in range(len(word)): idx = ord(word[i]) - ord('a') # 주어진 단어의 인덱스 값
a 맨 첫 알파벳이니까 ord('a')를 뺴주면 a부터 z까지 0, 1, 2, 3 .. 순서로 각 알파벳의 인덱스 값을 만들어 줄 수 있다.
그리고 문제에서 각각의 알파벳에 대해 단어에 포함되어 있는 경우, 처음 등장하는 위치를 표기하라고 했으므로
알파벳이 중복되는 경우 위치가 덮어씌워지지 않도록 (해당 알파벳의 첫 등장 위치를 반환) 이렇게 코드를 짠다.
if result[idx] == -1: # 해당 알파벳이 아직 기록되지 않은 경우에만 result[idx] = i # 해당 알파벳의 첫 등장 위치를 반환
출력은 리스트로 해도 되지만 보기 좋게 인덱스값만 보여지도록, 요소들을 문자열로 바꾸고 공백으로 구분해준다.
[0, -1, -1, ...]0 -1 -1 ...
print(' '.join([str(num) for num in result]))
map 함수를 써도 된다.
print(' '.join(map(str, result)))
전체 코드
만약 단어를 atom이라고 한다면
import string def get_idx(word): result = [-1]*len(string.ascii_lowercase) for i in range(len(word)): idx = ord(word[i]) - ord('a') # 주어진 단어의 인덱스 값 if result[idx] == -1: # 해당 알파벳이 아직 기록되지 않은 경우에만 result[idx] = i # 해당 알파벳의 첫 등장 위치를 반환 print(' '.join([str(num) for num in result])) print(' '.join(map(str, result))) get_idx('atom')
이렇게 처리된다.
0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 3 -1 2 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 3 -1 2 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1
'Python' 카테고리의 다른 글
파이썬 알고리즘 초급 문제 (0) 2024.07.12 [파이썬, 자료구조 알고리즘] Stack (2) 2024.07.12 파이썬, flask, SQLAlchemy, SQLite, jsonify로 가위 바위 보 게임 코드 웹 페이지에 올리기 (0) 2024.07.10 flask 파이참 템플릿, code snippets이 안불러와질때 (0) 2024.07.09 파이썬, class로 sns platform 코드2 input으로 객체 생성 (0) 2024.07.06