✔ 주안점
index의 중복처리 반환(존재하는 모든 원소의 인덱스를 반환해야 했던 것)
💻 부끄러운 나의 코드
def solution(L, x):
answer = []
if x in L:
for i in range(len(L)):
a = L[i]
if x == a:
if i< len(L):
answer.append(L.index(a, i))
else:
answer.append(L.index(a, i-1))
# 인덱스에 집착하다보니 index method를 이용할 수밖에 없었음. ...
# 그 결과.. 비효율적인 코드 완성됨..
else:
pass
else:
answer.append(-1)
return answer
✔ 문제점
- 또 비슷하게 if/else 식의 코드 진행.... 으... 극혐....
- index에 집착하다보니 index함수를 이용하려고 했고, 그 결과 비효율적인 코드가 완성됨
(마지막 인덱스를 따로 처리하긴했지만 if/else식이 너무 김)
∵ index(a, i) : i번째 위치부터 a문자가 위치한 자리 반환
✔ 다른 풀이 참고
1. index 함수 사용하지 않기
def solution(L, x):
idx = []
for i in range(len(L)):
if L[i] == x:
idx.append(i)
if len(idx) == 0 : # 아무것도 안들어가 있을 때.....
idx.append(-1)
return idx
index함수를 이용하지 않고도, 그냥 for문의 i를 append하면 index가 됨. 이 i를 append하면 인덱스가 담긴 list가 되는 것이다..... index함수를 괜히 이용하려고 했다가 함수만 복잡해진다. i가 인덱스의 역할도 함을 기억하자.
x가 L에 존재하냐를 묻는 if, else문은 여기서는 존재할 필요가 없다. for문으로 우선 훑고 따로 빼 단독 if문으로만 예외를 처리해주면 된다.
2. enumerate 사용하기
def solution(L, x):
if x in L:
return [i for i, j in enumerate(L) if j==x]
else:
return [-1]
enumerate를 이용해 index를 첫번째 인자로 가져온다. index를 가져오는 방식이 for문 말고 enumerate도 있다.
포함관계를 확인은 없어도 될 것 같다.
cf) for문과 if를 한줄로 표현해서 리스트로 만드는 방식. 이전 포스팅에서 봤던 방식이다.
# 원래
for i in v:
if i==12:
print(i)
# 한줄로 코딩
[i for i in v if i==12]
반응형
'Algorithms 💻' 카테고리의 다른 글
자주 쓰이는 기본적인 정규표현식(Regex) 정리 (0) | 2021.04.19 |
---|---|
[Project Euler] Problem 1 ~ 7번 알고리즘 풀이 (0) | 2021.02.24 |
[알고리즘] - 선형배열 (정렬된 리스트에 원소 삽입하기) (0) | 2020.12.30 |