"어서와! 자료구조와 알고리즘은 처음이지?" 강의의 리스트에서 원소 찾아내기 문제를 풀고 고치는 과정을 기록합니다.
def solution(L, x):
answer = []
for i in range(len(L)):
if x == L[i]:
answer.append(i)
if len(answer)==0:
answer.append(-1)
return answer
일단 처음에는 for문 돌면서 x와 비교를 하면서 인덱스를 넣어주고 길이가 0, 즉 아무것도 들어오지 않았으면 리스트에 -1만을 넣어주는 방식으로 풀었어요.
처음에는 이렇게 풀었는데 힌트를 참고하여 다시 풀어보기로 했어요!
def solution(L, x):
answer = []
if x in L:
for i in range(len(L)):
if x == L[i]:
answer.append(i)
else:
answer.append(-1);
return answer
이번에는 리스트에 x가 포함되지 않았다면 -1을 넣어주고 그렇지 않으면 아까의 방법처럼 x가 들어있는 L의 인덱스를 answer에 append해주는 방법으로 풀었어요.
근데 리스트 슬라이싱으로는 어떻게 푸는지 감이 안오더라고요 그래서 다른 사람의 풀이를 참고해봤어요!
def solution(L, x):
answer = []
idx = -1
currIdx = 0
while x in L:
idx = L.index(x)
answer.append(idx + currIdx)
currIdx += idx+1
L = L[idx+1:]
if idx == -1:
answer.append(-1)
return answer
다른 사람의 풀이를 참고하며 이렇게 리스트 슬라이싱을 사용하여서 풀어보았어요. 좋은 방법인 것 같아요. 역시 !
리스트 안에 x가 있는 동안 반복을 하면서
L 리스트에서 x가 있는 위치의 인덱스를 idx에 넣어주고
그 idx+currIdx를 answer에 추가해줍니다.
그리고 currIdx에 리스트의 현재 x의 인덱스 위치+1를 누적합니다. 그 이유는 x가 여러개 있다면 계속 추가를 해줘야 하기 때문이고 +1을 해주는 이유는 슬라이싱을 하면 0부터 시작함으로 idx+currIdx를 하면 하나 적은 인덱스가 저장되기 때문입니다.
그리고 현재 x의 인덱스 뒤의 내용을 잘라서 L에 넣어줍니다.
다음 반복을 하면 슬라이싱이 된 L에서 x의 인덱스를 찾고 이전 L 리스트의 x 위치 + 1의 위치와 슬라이싱이 된 L 리스트의 x 인덱스 위치를 더해줍니다. 슬라이싱이 된 리스트는 0부터 시작하고, 이전 리스트는 x를 찾은 위치의 바로 뒤부터 슬라이싱을 하기 때문에 아까 currIdx에 1을 더해준겁니다.
이상 있으면 댓글 남겨주시면 감사하겠습니다.^^
'무작정 따라해보기(정리, 문제풀기) > 어서와! 자료구조와 알고리즘은 처음이지?' 카테고리의 다른 글
선형탐색, 이진탐색(python) (0) | 2021.08.31 |
---|---|
정렬(python) (0) | 2021.08.31 |
이진탐색(python 코드) (0) | 2021.08.31 |
정렬된 리스트에 원소 삽입하기(python 코드) (0) | 2021.08.28 |